SAS:将字符转换为数字变量-逗号作为十进制分隔符
我正试图使用输入功能,正如人们经常建议的那样,但SAS在正确解释金额方面似乎存在一些问题,如: 2,30 1,61 0,00 …我最终会丢失值。可能是因为逗号是SA的来源;) 为什么上面的结果是新的= 似乎我已经找到了一些解决办法——在调用输入函数之前,使用TRANWRD将逗号替换为句点(参见下面的代码),但这是一个非常难看的解决方案,我想一定有一个合适的解决方案SAS:将字符转换为数字变量-逗号作为十进制分隔符,sas,formatting,type-conversion,data-conversion,Sas,Formatting,Type Conversion,Data Conversion,我正试图使用输入功能,正如人们经常建议的那样,但SAS在正确解释金额方面似乎存在一些问题,如: 2,30 1,61 0,00 …我最终会丢失值。可能是因为逗号是SA的来源;) 为什么上面的结果是新的= 似乎我已经找到了一些解决办法——在调用输入函数之前,使用TRANWRD将逗号替换为句点(参见下面的代码),但这是一个非常难看的解决方案,我想一定有一个合适的解决方案 data temp; old = '1,61'; new = input(tranwrd(old,',','.
data temp;
old = '1,61';
new = input(tranwrd(old,',','.'), 5.2);
run;
在您的示例中,
new=。
的原因是SAS无法将逗号识别为十进制分隔符。请参阅日志中的注释
注意:第4行第11列的函数输入参数无效。
旧=1,61新=。错误=1 N=1
注意:无法在以下位置执行数学运算。操作结果已设置为
缺少值
包含各种SAS信息的列表。根据文档,您似乎可以使用COMMAX
informat
COMMAXw.d—写入数值时,每三位数字之间用句点分隔,小数点之间用逗号分隔
修改后的代码如下所示:
data temp;
old = '1,61';
new = input(old,commax5.);
run;
proc print;
结果是:
Obs old new
1 1,61 1.61
如果要保持new
变量的格式相同,只需添加语句format new commax5即可代码>到数据步骤
感谢Tom指出SAS在INPUT()
函数中使用信息。函数INPUT()
使用信息,而不是格式。幸运的是,代码将使用名为COMMAX
的信息。但是,您不希望在信息上使用十进制规范input(旧的,commax5.2)
会将'123'
转换为1.23
,因为它会假定您的输入字符串删除了十进制分隔符以节省空间。所以只需使用输入(旧的,逗号5)
。
Obs old new
1 1,61 1.61