2016-12-14 12 views
0

在数据步骤,如果我做为什么某些格式会在sas数字中为字符转换创建精度错误?

strip(put(number,best32.)) 

我得到一个精度误差为一些数字,而不是为别人:

0.2804 --> "0.2804" 
0.0804 --> "0.08039999999999" 

我不明白为什么第一个数字是完全转化成一个字符串,第二个有精度错误。这是因为实际数字实际上是0.08039999999999(8字节长度),并且SAS在“企业指南”中显示的精确度并不高?

我想这不是

strip(put(number,20.10)) 

但后来我得到很多不必要的零。

0.2804 --> "0.2804000000" 
0.0804 --> "0.0804000000" 

终于让我找到这个做什么,我需要:

strip(cats(number)) 

这是最好的选择吗?

回答

1

这是因为您的实际人数接近0.08039999999999而不是0.0804。所以当你要求它使用最好的数据来呈现数据时,它可以在32个字符中选择前者。

试着运行这段代码。

data _null_ ; 
    input x ; 
    s = put(x,best32.); 
    put (x s) (=); 
cards; 
0.2804 
0.0804 
0.08039999999 
; 
相关问题