我目前正在参加SAS课程,并试图了解为什么SAS将'Medium'的值分配给第5个观察Burt。我理解为解决这个错误需要做些什么,但我更感兴趣的是为什么SAS将“中等”分配给Burt。
1.它与条件有关吗?
2.它是否与字符到数字的自动转换有关?
/* Here is the input data */
data work.levels;
infile datalines missover;
input Name $ Level $;
datalines;
Frank 1
Joan 2
Sui 2
Jose 3
Burt 4
Kelly
Juan 1
;
/* Here is the DATA step with the incorrect logic */
data work.expertise;
set work.levels;
if level = . then
expertise = 'Unknown';
else if level = 1 then
expertise = 'Low';
else if level = 2 or 3 then
expertise = 'Medium';
else
expertise = 'High';
run;
/* Print Step */
proc print data=work.expertise;
run;
就像我说的那样,我明白逻辑应该是
else if level = 2 or level = 3 then
expertise = 'Medium';
但是什么导致“坏”逻辑为Burt产生'中等'的值,他的等级为4? SAS如何阅读错误的逻辑来为Burt提供这个价值?谢谢高级。
答案 0 :(得分:4)
if level = 2 or 3
可能被解释为if (level = 2) or (3)
,它始终为true,因为值3
不为零且不是缺失值。
SAS在IF-THEN语句中计算表达式,以产生非零,零或缺失的结果。非零和非缺失结果导致表达式为真;零或缺失的结果导致表达式为假。
我假设在评估逻辑运算符时使用类似的规则。