IF-THEN / ELSE条件如何解决这个问题?

时间:2018-11-10 00:42:36

标签: sas

为什么在以下程序中以某种方式输出,我感到有点困惑。

 data a;
 input name$ lv @@;
 cards;
 Frank 1 Joan 2 Sui 3 Burt 4 Kelly . Juan 1
 ;
 data b;
 set a;
 if lv=.
 then expertise='?';
 else if lv=1 
       then expertise='L';
       else if lv=2 or 3 
            then expertise ='M';
            else expertise ='H';
 run;
 proc print data=b;
 run;

在上面的程序中,我期望包含Burt的观测结果的输出具有H的专业知识,但由于某种原因,其值为M。

我本以为if语句应该为lv =(2或3),但是现在当我这样做时,那些以为专门知识应该等于M的lv = 2和lv = 3的人现在也变成了H。

*这可能是因为语法不合适,并且lv永远不会(2或3)/ 我不确定为什么这不会引起错误 /,所以用ELSE语句来解释被执行。

我有一种不了解ELSE实际工作方式的感觉。

但是,根据该逻辑,如果lv = 2部分被识别而其他部分未被识别,我不确定为什么lv = 3和lv = 4不会产生H。

我的目标是了解为什么程序会像没有语法错误一样运行,为什么输出的是原样。

2 个答案:

答案 0 :(得分:2)

您的错误在这里

If lv = 4 or 0 

您认为这意味着

If lv = 4 or lv = 0

但不是。实际发生的是

If (lv = 4) or 0

在SAS中,0为false,任何大于1的数字为true。不确定小数点。无论如何。或条件使此错误。但是在您的第一个示例中,它始终是正确的。

答案 1 :(得分:2)

您的语法不正确,但不是非法的,因此SAS满足了您的要求而不是您想要的。条件lv=2 or 3从左到右评估。因此,根据lv=2的值是否为10会产生lv2。但是1 or 30 or 3都是正确的,因为始终将3视为正确。

您真正想要的是in运算符。

if missing(lv) then expertise='?';
else if lv=1 then expertise='L';
else if lv in (2 3) then expertise ='M';
else expertise ='H';