2016-12-14 30 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 
; 
相關問題