此代码给出错误“Expecting an integer constant”。为什么?这是非常直接的,我找不到任何说()不适用于小数。我需要在某处“做”吗?谢谢。
data clustered;
set combd;
if (avpm in(393821:450041) or avpm in(337601:393821) or avpm in
(225161:281381)) and fsp in (.8768:1) then class='1';
if (avpm in(112720:168940) or avpm in(56500:112720) or avpm in
(280.06:56500)) and fsp in (.8768:1) then class='2';
if avpm in(280.06:56500) and (fsp in (.507:.6303) or fsp in (.3838:.507)
or fsp in (.2606:.3838)) then class='3';
if avpm in(280.06:56500) and (fsp in (.1373:.2606) or fsp in
(.0141:.1373)) then class='4';
if avpm in(280.06:56500) and fsp in (.8768:1) then class='5';
if avpm in(280.06:56500) and (fsp in (.8768:1) or fsp in (.7535:.8768) or
fsp in (.6303:.7535)) then class='6';
run;
答案 0 :(得分:1)
IN
不适用于小数。
事实上,IN
可能不会按照您的想法行事。
IN()
是执行以下操作的运营商:
等于列表中的一个
注意list
。也就是说,并不是说数字在开始和结束之间;相反,它正在将起点扩展为整数列表,并评估它是否在该列表中。您可以在The IN operator in numeric comparisons:
您可以使用简写表示法来指定要搜索的连续整数范围。通过使用语法M:N作为要搜索的列表中的值来指定范围,其中M是下限,N是上限。 M和N必须是整数,M,N和M和N之间的所有整数都包含在范围内。
重要的是,根据定义,任何非整数的数字都不包含在此范围内。所以:
3.5 in (2:4)
为false,因为3.5不在列表(2,3,4)
中。
data test;
x = 3.5;
y = x in (2:4);
put x= y=;
stop;
run;
x=3.5 y=0
您需要使用ge
和/或le
(或gt
和/或lt
)来做您想做的事。
0.8768 le fsp le 1
你可以像这样把它们连在一起,所以写起来相对容易。