首页 > 解决方案 > SAS将字符值转换为数字,保留小数

问题描述

我有一个数据库,其中的值保存为字符。观察结果之间的小数点数可能不同,即可以找到 10,132 和 6,254252。

我想将这些字符值转换为数值,同时保留所有小数点。使用 input(char,best.) 会产生 1 个小数点。简单地将字符串与 1 相乘得到我 5。这里到底发生了什么,我如何调整代码以包含所有小数?

请参见下面的示例。

data test;
    format CharVar $50. value_num1 value_num2 20.14;
    CharVar="7663229328,8184132475796";
    Value_num1 = input(tranwrd(CharVar,",","."), best.);
    Value_num2 = tranwrd(CharVar,",",".")*1;
run;

CharVar= 7663229328,8184132475796
Value_num1=7663229328.800000000
Value_num2=7663229328.818410000

标签: sastype-conversion

解决方案


问题是您正在使用best.- 实际上是best12.- 作为信息。它只读取 12 个字符 - 在您的示例中,小数点左边的 10 个字符加上小数点加上小数点后的一个字符。

您可以使用best32.来获取更多信息,但请记住,数字字段实际上只能精确存储 15 个左右的数字(小数两边的组合)。因此,为什么 *1 会给你更多。使用input- 这是正确的方法 - 但不要指望所有数字。

有关更多详细信息,请参阅这篇关于SAS 中的数值精度的文章。


推荐阅读