输入时字符字段中的小数精度丢失
Decimal precision in character field lost on input
我正在尝试将包含数字的字符变量转换为数字变量而不丢失小数精度。这是一个输出示例:
data _null_;
format res 20.17;
res = input("54.78566360473633",20.17);
put res;
run;
结果:
54.78566360473630000
可以看到结果的位数是正确的,但是最后一个非零位与字符变量的最后一位不匹配。我试过使用位数较多和较少的格式(例如 18.15 或 15.13),并且我试过使用 f20.17 之类的格式“强制”小数位数,但是 none 这个似乎有效。
我尝试浏览了一些文档页面,但似乎没有任何相关内容。我确定这确实是我在这里缺少的基本内容,但是,我怎样才能让 sas 忠实地读取所有数字?
SAS 有两种数据类型。浮点数和定长字符串。格式只是关于如何显示值的说明。 Informats 是有关如何将文本转换为值的说明。附加到变量的 FORMAT 或用于在变量中创建值的 INFORMAT 都不会影响数字的存储方式。
如果您想使用十进制算术,则将您的值存储为整数,并在单独的变量中跟踪指数。但即便如此,根据您的 SAS 版本使用的浮点表示中使用的尾数大小,您可以存储的精度也会受到限制。您可以使用 CONSTANT() 函数的 EXACTINT 选项查看 SAS 可以准确存储的最大连续整数。
我正在尝试将包含数字的字符变量转换为数字变量而不丢失小数精度。这是一个输出示例:
data _null_;
format res 20.17;
res = input("54.78566360473633",20.17);
put res;
run;
结果:
54.78566360473630000
可以看到结果的位数是正确的,但是最后一个非零位与字符变量的最后一位不匹配。我试过使用位数较多和较少的格式(例如 18.15 或 15.13),并且我试过使用 f20.17 之类的格式“强制”小数位数,但是 none 这个似乎有效。
我尝试浏览了一些文档页面,但似乎没有任何相关内容。我确定这确实是我在这里缺少的基本内容,但是,我怎样才能让 sas 忠实地读取所有数字?
SAS 有两种数据类型。浮点数和定长字符串。格式只是关于如何显示值的说明。 Informats 是有关如何将文本转换为值的说明。附加到变量的 FORMAT 或用于在变量中创建值的 INFORMAT 都不会影响数字的存储方式。
如果您想使用十进制算术,则将您的值存储为整数,并在单独的变量中跟踪指数。但即便如此,根据您的 SAS 版本使用的浮点表示中使用的尾数大小,您可以存储的精度也会受到限制。您可以使用 CONSTANT() 函数的 EXACTINT 选项查看 SAS 可以准确存储的最大连续整数。