If statement 简单的If和or语句

If statement 简单的If和or语句,if-statement,sas,If Statement,Sas,您好,我正试图在sas中编写一个简单的if and 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; /* th

您好,我正试图在sas中编写一个简单的if and 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语句


谢谢

在中使用,而不是错误指定的OR:

if family = "Pink flag" and NBR in ( 1000, 1500, 2500) 
         then place = PF;
您的或条件没有按照您的方式进行评估,您应该在这些条件周围加上括号。你还错过了最后一个等号

这也将有助于:

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

我假设您在示例代码中键入了1025,而在代码中键入了1500。我将让您根据需要进行修复,因为它们当前不对齐。

所以您是否只想更改族值为粉色标志的值?如果是这样的话,那么在你的逻辑中明确这一点<代码>(family=“Pink flag”)和(…)我想更改值,其中它的值同时为Pink flag和以下数字之一:1000、1500。它适用于以下标志,但由于某些原因,它没有注册1000。另外,是的,我注意到BF不是按升序排列的标志,这只是人们向我发送数据的方式,我输入的数据(根据另一个名为ID的变量排序,此处未提及)是NBR数字还是字符?在与1000进行比较之前,您是否尝试过对值进行舍入?PF是另一个变量的名称吗?或者是指文字字符串P和F
place='PF'
Yes在我的代码中我有place='PF',很抱歉遗漏了这一点,我会更新它。我也刚刚开始工作。我试过Reeza的“和(NBR=1000…”在关闭和打开sas后,解决方案再次生效。我不知道怎么会发生这种情况,我只是假设文件不会正确更新,即使我没有收到错误消息。知道会发生什么吗?Reeza,你是对的,我键入了上面的一些代码。我已经更正了它。我还尝试了这两种方法以上提到的。这两种方法的结果都是NJ为所有NBR的sReeza,我关闭并打开了SAS,尝试了你的建议,这次效果非常好。谢谢你的帮助。我不知道出了什么问题,但简单的重新启动似乎就可以了