Sas 输入时字符字段中的小数精度丢失

Sas 输入时字符字段中的小数精度丢失,sas,data-conversion,decimal-precision,Sas,Data Conversion,Decimal Precision,我正在尝试将包含数字的字符变量转换为数字变量,而不会丢失十进制精度。下面是一个输出示例: data _null_; format res 20.17; res = input("54.78566360473633",20.17); put res; run; 结果是: 54.78566360473630000 您可以看到结果中的位数是正确的,但最后一个非零位数与字符变量的最终位数不匹配。我曾经尝试过使用位数越来越大和越来越小的格式(如18.15或15.13),我也尝试过用

我正在尝试将包含数字的字符变量转换为数字变量,而不会丢失十进制精度。下面是一个输出示例:

data _null_;
format res 20.17;
res = input("54.78566360473633",20.17);
put res;
run;
结果是:

54.78566360473630000
您可以看到结果中的位数是正确的,但最后一个非零位数与字符变量的最终位数不匹配。我曾经尝试过使用位数越来越大和越来越小的格式(如18.15或15.13),我也尝试过用f20.17这样的格式“强制”小数位数,但这些似乎都不起作用


我试着浏览了一些文档页面,但似乎没有什么是密切相关的。我确信这是我在这里遗漏的基本内容,但是,如何让sas忠实地读取所有数字?

sas有两种数据类型。浮点数和固定长度字符串。格式只是如何显示值的说明。信息是关于如何将文本转换为值的说明。附加到变量的格式或用于在变量中创建值的信息都不会对数字的存储方式产生任何影响


如果要使用十进制算术,请将值存储为整数,并在单独的变量中跟踪指数。但即使这样,您也会受到基于SAS版本使用的浮点表示中使用的尾数大小的精度限制。您可以使用CONSTANT()函数的EXACTINT选项查看SAS可以精确存储的最大连续整数。

Hey@Tom,感谢您的链接。所以如果我理解的话,SAS没有任何方法来表示十进制格式(而是依赖于浮点),而我的字符变量最终耗尽了格式的精度阈值?即使在字符变量的最后一个数字之后添加更多的数字(例如945),结果输出也是相同的。我理解正确吗?谢谢这不是问题的原因,但不要在信息上指定小数点宽度,除非希望SAS将没有明确小数点的字符串除以10的幂。SAS有两种数据类型。浮点数和固定长度字符串。格式只是如何显示值的说明。信息是关于如何将文本转换为值的说明。十进制数不能用二进制数准确存储。您的最后一位小数超出了使用SAS使用的8字节浮点表示法将十进制值存储为二进制数的精度限制。