#sas
#sas
Вопрос:
Новичок в SAS — пытаюсь выполнить практическое упражнение. Вероятно, я сам столкнусь с palm, как только кто-нибудь укажет, что я делаю неправильно, но пока я не могу сказать, в чем проблема.
У меня есть набор данных с 3 переменными: ID $ avgNumDonations DonationAmt.
Меня просят создать подмножество (я делаю это в своей инструкции proc print), которое не содержит записей с avgDonation ниже 20 и DonationAmt менее миллиона.(Я считаю, что это вопрос с подвохом, поскольку в исходном наборе данных нет случаев, соответствующих обоим критериям)
Я написал свое предложение where следующим образом: где пожертвованиеamt > = 1000000 и avgNumDonations> = 20
Однако, похоже, он действует как оператор OR вместо оператора AND, потому что мое подмножество устраняет идентификаторы 45 и 78.
Может кто-нибудь сказать мне, чего мне не хватает? Как я уже упоминал, ни один случай не соответствует критериям, поэтому я ожидал, что в моем «подмножестве» будут такие же случаи.
Комментарии:
1. Можете ли вы показать нам свой код?
Ответ №1:
Я думаю, вы можете неправильно понимать логику WHERE или AND / OR.
ГДЕ — критерий включения. Почти все ваши записи соответствуют этим критериям, но не все. Обратите внимание, что with И it должны соответствовать обоим вашим критериям, если любой из них имеет значение false, он исключается. Звучит так, как будто вы хотите ИЛИ вместо И .
Таким образом, для определения записей, которые исключены, любой из критериев будет ложным. Поэтому ищите записи, в которых numDonations <20 — (ID 45) и DonationAmount<1000000 — ID 78. Таким образом, эти две записи будут исключены. Это то, что вы видите.
Ответ №2:
Если оба критерия должны соответствовать условиям, вы должны использовать ИЛИ вместо И:
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 строки удаляются.