如何使用AND和OR语句进行过滤?

时间:2017-06-26 22:10:29

标签: sas

我有一个数据集df,如下所示:

ZIP    TEENS     ADULTS     SENIORS   TOTAL
054216 .         2000       .         2000
02216  45        105        10        160
01720  0         256        0         256
02113  .         4122       918       5040
02144  782       20         0         1002

我想排除所有成年人的邮政编码。另外,我想只保留成年人口大于50%的行。下面列出的我的代码保留了第1行和第3行,即使这些社区中没有青少年或老年人。任何关于它有什么问题的提示都将不胜感激。

data adult_zips;
    set df;
    where ((adults/total) > 0.50) and
        ((teens is not missing) or (teens ne 0)) and 
        ((seniors is not missing) or (seniors ne 0));
run;

2 个答案:

答案 0 :(得分:1)

你混淆了AND和OR:

data adult_zips;
    set df;
    where adults / total > 0.50 
      and 
      (
        (teens is not missing and teens ne 0)
        or
        (seniors is not missing and seniors ne 0)
      );
run;

或更简单:

data adult_zips;
    set df;
    where adults / total > 0.50 
      and (teens > 0 or seniors > 0);
run;

甚至:

data adult_zips;
    set df;
    where adults / total > 0.50 
      and adults ne total;
run;

答案 1 :(得分:1)

data adult_zips;
set df;
where adults / total > 0.50 
  and (teens > 0 or seniors > 0);

运行;

这是最简单的解决方案。