声明

时间:2016-10-06 22:13:04

标签: sas

SAS新手 - 试图完成练习。一旦有人指出我做错了什么,我可能会自己面对掌心,但就目前而言,我无法分辨出问题所在。

我有一个包含3个变量的数据集:ID $ avgNumDonations DonationAmt。

enter image description here

我被要求创建一个子集(我在proc print语句中执行它),其中不包含avgDonation低于20且DonationAmt低于100万的记录。(我相信这是一个技巧问题,因为没有案例在满足两个标准的原始数据集中)

我写了我的where子句如下: 其中DonationAmt> = 1000000和avgNumDonations> = 20

但是,它似乎充当了OR语句而不是AND语句,因为我的子集正在消除ID 45和78.

有人能告诉我我错过了什么吗?正如我所提到的,没有任何案例符合标准,所以我希望在我的“子集”中有相同的案例。

2 个答案:

答案 0 :(得分:0)

我认为你可能误解了WHERE或AND / OR逻辑。

包含标准在哪里。几乎所有记录都符合此标准,但并非全部。请注意,使用AND时,它必须满足您的两个条件,如果其中一个为false,则将其排除。听起来你想要一个OR而不是AND。

因此,要确定排除的记录,任何一个标准都将为false。因此,寻找numDonations< 20 - (ID 45)和DonationAmount< 1000000 - ID 78.所以这两个记录将被排除在外。这是你所看到的。

答案 1 :(得分:0)

如果两个标准都符合条件,则必须使用OR而不是AND:

data a;
  id=12;
  avgdon = 58.3;
  sumdon=4833722;
    output;
  id=45;
  avgdon = 15.3;
  sumdon=14833722;
    output;
  id=56;
  avgdon = 50.3;
  sumdon=9833722;
    output;
  id=78;
  avgdon = 39.3;
  sumdon=833722;
    output;
  id=910;
  avgdon = 28.3;
  sumdon=2833722;
    output;
run;

proc print data=a(where=(sumdon>=1000000 OR avgdon>=20));
run;

否则使用AND是正确的。然后消除了2行。