简单的if和or语句

时间:2019-07-10 16:12:50

标签: if-statement sas

你好,我试图用sas写一个我认为会很简单的if和or语句,但是我遇到了麻烦。 and语句之后的第一个条件-在这种情况下-“ 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 个答案:

答案 0 :(得分:1)

使用IN代替错误指定的OR:

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。我会让您根据需要解决此问题,因为它们当前未对齐。