IN函数不适用于小数

时间:2017-10-17 20:46:32

标签: sas

此代码给出错误“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;

1 个答案:

答案 0 :(得分:1)

IN不适用于小数。

事实上,IN可能不会按照您的想法行事。

根据SAS documentation on operators

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

你可以像这样把它们连在一起,所以写起来相对容易。