If statement SAS else if子句混淆

If statement SAS else if子句混淆,if-statement,sas,If Statement,Sas,我正在运行以下代码: data new; set old; if visits=. then band='Poor'; else if visits=1 or visits=2 then band='Low'; else band='High'; run; 当else if语句更改为: else if visits=1 or 2 then band='Low'; 为什么在访问量大于2的情况下,Low值会显示为波段,而不是High?这是因为在这种

我正在运行以下代码:

data new;  
set old;    
    if visits=. then band='Poor';  
    else if visits=1 or visits=2 then band='Low';  
    else band='High';  
run;
当else if语句更改为:

else if visits=1 or 2 then band='Low';

为什么在访问量大于2的情况下,
Low
值会显示为波段,而不是
High

这是因为在这种情况下,您的
if
语句出错:

else if visits=1 or 2 then band='Low';
您错误地认为这是有效的:

if visits is 1, or visits is 2 then ...
事实上,这实际上是:

if visits is 1, or 2 is true then ...
所以你说的是does
2=true
,确实如此(所有非零值都隐式为true)。实际上,您最后的
else
语句(对于
High
)总是被忽略,因为
else if
将始终为真

坚持你最初的陈述,这正是你所期望的:

else if visits=1 or visits=2 then band='Low';

很好的解释。缺少的值也是错误的。因此建议“所有非零非缺失值均为真”。还值得指出的是IN()运算符是一种替代方法:否则如果在(1,2)中访问,则…还值得强调的是,“所有非零非缺失值均为真”的值是布尔运算的结果,而不是“访问”的值。因此,如果您将此条件向上移动到前面:如果访问量=1或2,则为band='Low';你们所有的乐队都是“低”的。下游“其他”没有机会执行。