我正在创建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,仍然无法正常工作
答案 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) ...
应该会使您的计算符合您的期望。