2

我正在将新变量创建为 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 ,仍然无法正常工作

4

1 回答 1

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) ...

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

于 2013-10-22T13:42:10.077 回答