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

kur*_*urp 4 formatting sas type-conversion data-conversion

我正在尝试使用INPUT功能,因为它总是被建议,但似乎SAS在正确解释数量方面存在一些问题,例如:2,30 1,61 0,00 ......我最终得到了缺失值.也许是因为逗号是数千个分隔符,SAS来自;)

data temp;
    old = '1,61';
    new = input(old, 5.2);
run;
Run Code Online (Sandbox Code Playgroud)

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

似乎我找到了一些解决方法 - 在调用INPUT函数之前使用TRANWRD用逗号替换逗号(下面的视频代码),但这是非常难看的解决方案,我想必须有一个合适的解决方案.

data temp;
    old = '1,61';
    new = input(tranwrd(old,',','.'), 5.2);
run;
Run Code Online (Sandbox Code Playgroud)

小智 5

new = .您的示例中的原因是因为SAS不将逗号识别为小数分隔符.请参阅日志中的注释.

注意:在第4行第11列中函数INPUT的参数无效.old = 1,61 new =.ERROR = 1 N = 1注意:无法在以下位置执行数学运算.操作结果已设置为缺失值.

该文档包含各种SAS信息的列表.根据文档,您可以使用该COMMAX信息.

COMMAXw.d - 使用分隔每三个数字的句点和用于分隔小数部分的逗号来写入数值.

修改后的代码如下所示:

data temp;
    old = '1,61';
    new = input(old,commax5.);
run;

proc print;
Run Code Online (Sandbox Code Playgroud)

结果输出是:

Obs    old      new

 1     1,61    1.61
Run Code Online (Sandbox Code Playgroud)

如果要将new变量保持为相同的格式,只需将语句添加format new commax5.;到数据步骤即可.

感谢Tom指出SAS使用该INPUT()功能中的信息.

  • `INPUT()`函数使用INFORMAT,而不是FORMAT.幸运的是,您的代码将使用名为"COMMAX"的信息.但是,您不希望在信息中使用小数规范.`input(old,commax5.2)`将''123'转换为`1.23`,因为它会假设您的输入字符串已删除了小数分隔符以节省空间.所以只需使用`input(old,commax5.)`. (4认同)