Простое если и или утверждение - PullRequest
2 голосов
/ 10 июля 2019

Здравствуйте, я пытаюсь написать то, что я думал, было бы простым оператором if и or в sas, но у меня возникли проблемы. Первое условие после оператора и в этом случае «Nbr = 1000» не обрабатывается и пропускается.

data want;
set have;
if family = "Pink flag" and NBR = 1000 OR NBR = 1500 
   then place = PF;
if family = "Blue Flag" and NBR = 2500 OR NBR = 2000
   then place = BF;
 /* this logic is repeated with different family names, nbrs and places */
run;

это вывод, который я получаю

family    NBR       Place
Pink Flag 1000      NJ
Pink Flag 1000      NJ
Pink Flag 1000      NJ
Pink Flag 1025      NJ
Pink Flag 1025      NJ
Pink Flag 1025      NJ
Pink Flag 1500      PF
Pink Flag 1500      PF
Pink Flag 1500      PF
Blue Flag 1000      BF
Blue Flag 2000      BF
Blue Flag 2000      BF
Blue Flag 2025      NJ
Blue Flag 2025      NJ
Blue Flag 2025      NJ
Blue Flag 2500      BF
Blue Flag 2500      BF
Blue Flag 2500      BF

как вы можете видеть, он работает для 1500, но не для 1000. Он также работает и для Голубого флага

что я хочу

family    NBR       Place
Pink Flag 1000      PF
Pink Flag 1000      PF
Pink Flag 1000      PF
Pink Flag 1025      NJ
Pink Flag 1025      NJ
Pink Flag 1025      NJ
Pink Flag 1500      PF
Pink Flag 1500      PF
Pink Flag 1500      PF
Blue Flag 1000      BF
Blue Flag 2000      BF
Blue Flag 2000      BF
Blue Flag 2025      NJ
Blue Flag 2025      NJ
Blue Flag 2025      NJ
Blue Flag 2500      BF
Blue Flag 2500      BF
Blue Flag 2500      BF

Я также пытался использовать оператор where.

Спасибо!

1 Ответ

1 голос
/ 10 июля 2019

Используйте IN вместо ИЛИ, которые неправильно указаны:

if family = "Pink flag" and NBR in ( 1000, 1500, 2500) 
         then place = PF;

Ваши условия OR оцениваются не так, как вы, и вы должны заключить в скобки эти условия. Вы также пропускаете последний знак равенства.

Это также будет работать:

if family = "Pink flag" and (NBR = 1000 OR NBR = 1500 OR NBR = 2500) then place = PF;

Я предполагаю, что вы неправильно набрали 1025 в вашем примере кода против 1500 в коде. Я позволю вам исправить это по мере необходимости, потому что в настоящее время они не совпадают.

...