2015-06-17 3 views
1

Я бегу следующий код: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 visits=1 or 2 then band='Low'; 

Почему значение Low появляется как диапазон для случаев, когда посещения превышают 2 вместо High?

ответ

3

Это потому, что 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 ... 

Итак, вы говорите, делает 2 = true, что он делает (все нет n-нулевые значения неявно верны). Эффективно ваш окончательный оператор else (для High) всегда игнорируется, потому что else if всегда будет правдой.

Палка с первоначальным заявлением, которое делает именно то, что вы ожидаете его:

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

Хорошее объяснение. Недопустимые значения также неверны. Поэтому предположим, что «все ненулевые значения без пропусков верны». Также стоит отметить, что оператор IN() является альтернативой: else if посещения IN (1,2) then ... – Quentin

+2

Также стоит подчеркнуть, что это значение «все ненулевые не пропущенные значения являются истинными» является результатом булевой операции, а не значение «посещений». Поэтому, если вы переместите это условие на фронт: если посещения = 1 или 2, тогда группа = «Низкий»; Вся ваша группа будет «Низкая». Невозможно выполнить нисходящее «другое». –