我有一个包含3个变量的数据集:ID $ avgNumDonations DonationAmt。
我被要求创建一个子集(我在proc print语句中执行它),其中不包含avgDonation低于20且DonationAmt低于100万的记录。(我相信这是一个技巧问题,因为没有案例在满足两个标准的原始数据集中)
我写了我的where子句如下: 其中DonationAmt> = 1000000和avgNumDonations> = 20
但是,它似乎充当了OR语句而不是AND语句,因为我的子集正在消除ID 45和78.
有人能告诉我我错过了什么吗?正如我所提到的,没有任何案例符合标准,所以我希望在我的“子集”中有相同的案例。
答案 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行。