SAS格式计算

时间:2013-10-22 11:52:44

标签: sas

我正在创建New变量作为AGE .CUTOFF值为100,它除以12,因此值正好是8.3333 .....但很少新鲜度值是8.3333333。如果FRESHNESS> = 100/12,我必须选择SEGMENT的值,但选择新鲜度为8.3333的AMU ...... FRESHNESS的格式为F12.9,CUTOFF为BEST12。

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

我尝试使用不同格式制作截止到F12.9,仍然无法正常工作

1 个答案:

答案 0 :(得分: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) ...

应该会使您的计算符合您的期望。