В качестве альтернативы IF-THEN можно также использовать выражение SELECT-WHEN .
SELECT <(select-expression)>; WHEN-1 (when-expression-1 <..., when-expression-n>) statement 1; WHEN-n (when-expression-1 <..., when-expression-n>) statement 2; OTHERWISE <statement>; END;
SELECT-WHEN выполняет одно или несколько действий, основываясь на переменную, которую вы задаете в select-expression. B WHEN-1 - WHEN-n указываются возможные значения переменной. SAS сравнивает значение на каждом наблюдении с заданным в WHEN-1 и если TRUE (верно), выполняет statement 1. В ином случае, переходит к следующему WHEN-2 и т.д. Если же все WHEN-1 - WHEN- n оказались FALSE (не верными), тогда переходим к OTHERWISE и выполняется statement.
Рассмотрим пример на нашем дата сете Medications:

Создадим численную переменную TRTN для каждой лечащей группы (Treatment group):
data trt_num; set medications; select(TRT); when("QCM") TRTN=1; when("QKP") TRTN=2; when("QVA") TRTN=3; otherwise TRTN=4; end; run;
Для этого в качестве select-expression выбираем переменную TRT, и для каждого ее значения в when определяем, чему равно численное ее значение. Так как мы знаем, что всего у нас 4 treatment groups и НЕТ пустых значений TRT, то под otherwise подразумеваем лечение «RWC» .
Полученный дата сет trt_num:

Также в выражении SELECT-WHEN можно не указывать select-expression и пользоваться логическими операторами и операторами сравнения.
В качестве примера, определим для каждого пациента запланированную дату начала и конца лечения, в зависимости от treatment group:
data trt_date; set Medications; length start_date end_date $10; select; when(TRT in ('QVA', 'QCM')) do; start_date="2013-07-25"; end_date="2014-08-03"; end; when (TRT='QKP') do; start_date="2013-06-17"; end_date="2014-12-17"; end; when (TRT="RWC") start_date="2014-02-27"; otherwise; end; run;
Для того, чтобы не делать одно и то же действие для 2 treatment group QVA и QCM , можно применить оператор in. Также когда при одном и том же условии нам нужно определить одновременно и дату начала, и дату конца. В этом случае удобно воспользоваться do-end блоком. Так как для группы RWC мы не указали дату конце, эта переменная остается пустой.
Полученный дата сет trt_date:

Стоить заметить, что в утверждении otherwise ничего не указано. В этому случае, если бы мы имели наблюдение с пустым TRT, дата конца и дата начала были бы также пустыми.
Дополнительные материалы: