你好,我试图用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语句。
谢谢!
答案 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。我会让您根据需要解决此问题,因为它们当前未对齐。