为什么SAS应该将Medium的值分配给第5个观察值,因为它应该根据我的if来分配值High?

时间:2018-01-17 23:24:42

标签: sas

我目前正在参加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提供这个价值?谢谢高级。

1 个答案:

答案 0 :(得分:4)

if level = 2 or 3可能被解释为if (level = 2) or (3),它始终为true,因为值3不为零且不是缺失值。

来自IF-THEN/ELSE documentation

  

SAS在IF-THEN语句中计算表达式,以产生非零,零或缺失的结果。非零和非缺失结果导致表达式为真;零或缺失的结果导致表达式为假。

我假设在评估逻辑运算符时使用类似的规则。