Sas 检查列中的所有值

Sas 检查列中的所有值,sas,Sas,有没有办法选择一列中的所有值,然后检查整个列是否只包含某些参数?以下是我尝试过的代码,但我可以理解为什么它没有达到我想要的效果: IF City = "8" or City = "12" or City = "15" or City = "24" or City = "35" THEN put "All cities are within New York"; 我正在尝试选择“City”上的整个列,并检查该列是否只包含这5个值。如果它只包含这5个值,那么我希望它打印到日

有没有办法选择一列中的所有值,然后检查整个列是否只包含某些参数?以下是我尝试过的代码,但我可以理解为什么它没有达到我想要的效果:

IF City = "8" or
   City = "12" or
   City = "15" or
   City = "24" or
   City = "35"
THEN put "All cities are within New York";
我正在尝试选择“City”上的整个列,并检查该列是否只包含这5个值。如果它只包含这5个值,那么我希望它打印到日志中,说明这一点。但是,我可以看到我的方法检查每一行是否包含其中一行,如果只有一行包含其中一行,它将打印到日志中。因此,我会在日志中打印每个实例

我想做的是:

want-- IF (all of)City includes 8 & 12 & 15 & 24 & 35
       THEN put "All cities are within New York."

如果任何观察值不在您的值列表中,您只需要进行测试

data _null_;
   if eof then put 'All cities are within New York';
   set have end=eof;
   where not (city in ('8','12','15','24','35') );
   put 'Found city NOT within New York. ' CITY= ;
   stop;
run;

SQL替代方案可以是:

proc sql;
select case when sum(not city in ('8','12','15','24','35'))>0 then 'Found city NOT within New York' else 'All cities are within New York' end 
from have;
quit;

与日志中显示的不一样,也没有@Tom提供的效率高

当它发现列表中没有一个城市值时,它将立即停止,而不检查其余的城市值。这对性能来说是最佳的,但在这种情况下,我经常发现将所有具有意外值的行输出到数据集以供进一步分析是很有用的。