代码之家  ›  专栏  ›  技术社区  ›  kurp

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

  •  4
  • kurp  · 技术社区  · 7 年前

    我想用 输入 函数,正如经常建议的那样,但SAS在正确解释金额方面似乎存在一些问题,如: 2,30 1,61 0,00 ...我最终会丢失值。可能是因为逗号是SA的千位分隔符;)

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

    为什么上述结果是新的= . ?

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

    data temp;
        old = '1,61';
        new = input(tranwrd(old,',','.'), 5.2);
    run;
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   Joe    7 年前

    原因 new = . 在您的示例中,这是因为SAS不将逗号识别为十进制分隔符。请参阅日志中的注释。

    注意:第4行第11列的函数输入参数无效。 旧=1,61新=。 错误 =1 N =1 注意:无法在以下位置执行数学运算。操作结果已设置为 缺少值。

    The documentation 包含各种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() 作用