具有格式的数字到数字
Numeric to numeric with a format
我想通过简单的转换 table 来转换一个值,如下所示:
invalue eg2atptnum
1 = 0
2 = 2
3 = 4
4 = 6
5 = 8
6 = 24;
input()
需要输入字符。
有没有比 atptnum=input(put(mod(egtptnum,10),best.),eg2atptnum.);
更直接的方法来避免隐式类型转换?
atptnum
和 egtptnum
都是数字。
不确定 vvaluex 和 mod 函数在这里做什么。 input/putn 组合适用于值格式。
proc format;
value eg2atptnum
1 = 0
2 = 2
3 = 4
4 = 6
5 = 8
6 = 24;
run;
data have;
do i=1 to 6;
j=input(putn(i, 'eg2atptnum'),8.);
output;
end;
run;
如果您只是想避免警告,可以使用 cats
为您完成。不过这有点傻,因为它的工作量与 put
基本相同。
IE:
atptnum = input(cats(mod(egatptnum,10)),egatptnum.);
少了几个字符,但在长 运行 中没有真正帮助(除非你想使用 SAS 自动使用正确的转换,但这里似乎不太可能)。
否则没有直接的方法可以使用 format/informat 做你想做的事 - 你必须在左侧有字符或在右侧有字符(或两者),你不能从数字到数字.那是因为这或多或少是一种作弊:SAS 创建 formats/informats 并不是为了以这种方式使用它们,它只是一种利用数字 to/from 字符转换的便捷方式.
如果您愿意,有多种不使用 format/informat 的方法可以做到这一点。哈希 table 的设置工作大致相同,而且速度也差不多(在某些情况下更快,在某些情况下则不然,受内存大小限制)。
data eg2atptnum;
input egtptnum atptnum;
datalines;
1 0
2 2
3 4
4 6
5 8
6 24
;;;;
run;
data _null_;
if _n_=1 then do;
if 0 then set eg2atptnum;
declare hash eg2at(dataset:'eg2atptnum');
eg2at.defineKey('egtptnum');
eg2at.defineData('atptnum');
eg2at.defineDone();
end;
egtptnum=4;
eg2at.find();
put atptnum=;
run;
我想通过简单的转换 table 来转换一个值,如下所示:
invalue eg2atptnum
1 = 0
2 = 2
3 = 4
4 = 6
5 = 8
6 = 24;
input()
需要输入字符。
有没有比 atptnum=input(put(mod(egtptnum,10),best.),eg2atptnum.);
更直接的方法来避免隐式类型转换?
atptnum
和 egtptnum
都是数字。
不确定 vvaluex 和 mod 函数在这里做什么。 input/putn 组合适用于值格式。
proc format;
value eg2atptnum
1 = 0
2 = 2
3 = 4
4 = 6
5 = 8
6 = 24;
run;
data have;
do i=1 to 6;
j=input(putn(i, 'eg2atptnum'),8.);
output;
end;
run;
如果您只是想避免警告,可以使用 cats
为您完成。不过这有点傻,因为它的工作量与 put
基本相同。
IE:
atptnum = input(cats(mod(egatptnum,10)),egatptnum.);
少了几个字符,但在长 运行 中没有真正帮助(除非你想使用 SAS 自动使用正确的转换,但这里似乎不太可能)。
否则没有直接的方法可以使用 format/informat 做你想做的事 - 你必须在左侧有字符或在右侧有字符(或两者),你不能从数字到数字.那是因为这或多或少是一种作弊:SAS 创建 formats/informats 并不是为了以这种方式使用它们,它只是一种利用数字 to/from 字符转换的便捷方式.
如果您愿意,有多种不使用 format/informat 的方法可以做到这一点。哈希 table 的设置工作大致相同,而且速度也差不多(在某些情况下更快,在某些情况下则不然,受内存大小限制)。
data eg2atptnum;
input egtptnum atptnum;
datalines;
1 0
2 2
3 4
4 6
5 8
6 24
;;;;
run;
data _null_;
if _n_=1 then do;
if 0 then set eg2atptnum;
declare hash eg2at(dataset:'eg2atptnum');
eg2at.defineKey('egtptnum');
eg2at.defineData('atptnum');
eg2at.defineDone();
end;
egtptnum=4;
eg2at.find();
put atptnum=;
run;