2013-10-22 45 views
2

我正在創建新變量作爲AGE。CUTOFF值爲100,它除以12,因此該值恰好爲8.3333 .....但很少有新鮮度值是8.3333333。如果FRESHNESS> = 100/12,我必須選擇SEGMENT的值,但是它的選取AMU的新鮮度是8.3333 ... FRESHNESS的格式是F12.9,CUTOFF是BEST12。計算的SAS格式

data new; 
    set SEGMENT_AGE; 
    IF Freshness< CUTOFF/12 THEN AGE=AMU; 
         ELSE AGE=SEGMENT; 
    RUN; 

我試着用不同的格式,使得截止到F12.9,還是其不工作

+0

格式對基礎值沒有影響,它僅用於顯示目的。 SAS在內部爲所有數字使用浮點。 –

+0

感謝您的回覆,但我不知道爲什麼沒有得到我想要的值? – user2784588

+0

CutOff_month/12-Freshness的區別是2.960306E-15,它將如何? CutOff_month/12 = 8.3333和Freshness是8.3333 – user2784588

回答

1

您正在運行到浮點精度的問題。如果數字是重複小數(二進制),則可能有兩個不同的值(更高或更低 - 即0.333333333333333333或0.3333333333333333333334),具體取決於它是如何到達的。 IE:

1-(1/3) - (1/3) = 0.33333333333333333334 
0+(1/3)   = 0.33333333333333333333 

所以不要以爲它看起來應該是正好相等。此外,不重複小數的一些數字以二進制重複 - 例如7/10爲0.7小數,但不能精確地以二進制存儲。

如果您需要比較精確,您應該比較舍入數字;例如,

if round(freshness,0.001) < round(cutoff/12,0.001) ... 

應導致您的計算結果與您的預期相符。

+0

謝謝,我會一起去,並會讓你的結果 – user2784588

+0

謝謝喬。我知道了。 – user2784588