SAS:将字符转换为数字变量-逗号作为十进制分隔符

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,',','.

我正试图使用输入功能,正如人们经常建议的那样,但SAS在正确解释金额方面似乎存在一些问题,如: 2,30 1,61 0,00 …我最终会丢失值。可能是因为逗号是SA的来源;)

为什么上面的结果是新的=

似乎我已经找到了一些解决办法——在调用输入函数之前,使用TRANWRD将逗号替换为句点(参见下面的代码),但这是一个非常难看的解决方案,我想一定有一个合适的解决方案

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