Оператор WHERE используется для определения нужного вам подмножества из данного датасета.
Например, выбрать из датасета Analysis всех пациентов с нормальным уровнем гемоглобина в крови:
Для этого используем оператор WHERE:
data normal;
set analysis;
where ANRIND="Normal";
run;
Вы можете использовать все обычные операторы сравнения в WHERE (знаки больше, меньше, равно и т.д.). Также можно задать несколько выражений, используя логические операторы. Например, отобрать из датасета мужчин с низким уровнем гемоглобина:
data Male_Low;
set analysis;
where ANRIND="Low" and SEX="M";
run;
Свойства WHERE
На примере дата сета Medications рассмотрим свойства WHERE. (Примечание: TRT – лечащая группа, CMDECOD – название сопутствующего препарата, CMDOSE – доза этого лекарства, CMDOSU – единица измерения дозы, и CMDUR – длительность приема (дни)).
| WHERE | Пример |
|---|---|
| CONTAINS либо ? для выборки строк, которые включают указанную подстроку. |
where CMDECOD ? 'AL';
Result: CALCIUM, ENALAPRIL, HERBAL PREPARATION |
| IS NULL либо IS MISSING для выборки строк с пустыми значениями. | where CMDOSU is missing; |
| BETWEEN-AND для выборки строк, содержащих диапазоны значений, включительно. |
where CMDOSE between 10 and 100;
Result: CMDOSE=10; CMDOSE=65; CMDOSE=40; |
LIKE для выборки строк, которые совпадают с указанным значением:
|
|
| Оператор подобия =* для выборки строк, содержащих варианты написания указанного слова. |
where CMDECOD =* 'NYSTATIN';
Result: NYSTATIN + NISTATIN, NYSTATINE, NISTOTIN; |
Оператор IN
Задача: Из дата сета Medications требуется отобрать пациентов, которые принимали таблетки или капсулы в дата сет Tablets, а также создать дата сет Duration с пациентами, которые принимали препараты от 10 до 17 дней.
Для создания дата сета Tablets используем оператор WHERE и логический оператор OR:
data Tablets;
set Medications;
where CMDOSU="CAPSULE" or CMDOSU="TABLET";
run;
Бывают случаи, когда нужно сделать выборку со многими разными значениями одной и той же переменной (как в нашем случае CMDOSU). Для этого удобно использовать оператор IN:
data Tablets;
set Medications;
where CMDOSU in ("CAPSULE" "TABLET");
run;
Оператор IN – это оператор сравнения, который используется для поиска символьных или числовых значений, которые равны заданным значениям из списка. Список значений, которые нам надо отобрать, заключается в скобки и разделяется запятой или пробелом.
Также с помощью оператора IN можно задать промежуток числовых значений для выборки. Воспользуемся этим для создания дата сета Normal_dose:
data Dose;
set Medications;
where CMDUR in (10:17);
run;
Полученный дата сет:
Важно заметить, что с помощью оператора IN и заданого диапазона (M:N), можно отобрать только ЦЕЛЫЕ числа. По этому, в случае, когда вам нужно отобрать все промежуточные значения (дробные в том числе), лучше воспользоваться операторами сравнения, или BETWEEN-AND.
Оператор WHERE или IF
Так же как и WHERE, для выборки можно использовать и IF:
Where
data QVA_TRT1; set Medications; where TRT = "QVA"; run;
If
data QVA_TRT2; set Medications; if TRT = "QVA"; run;
Как результат получаем идентичные дата сеты QVA_TRT1 и QVA_TRT2
Но не всегда мы можем так легко заменять IF на WHERE , и на оборот.
Рассмотрим случаи, когда можно пользоваться только оператором IF, или только оператором WHERE, или же и тем, и тем.
- В PROC step используется только оператор WHERE ;
-
В DATA step используется:
- Оператор IF, если после условия нужно выполнить арифметическую операцию, присваивание, put/input и т.д.;
- В операторе SET (единственный набор данных) можно использовать как IF, так и WHERE.
- В операторе SET (несколько наборов данных), если переменная находится не во всех наборах данных, используем только IF:
data total; set set1 set2; /*переменная var есть в set1, но отсутствует в set2*/ if var<10; run;В случае использовании WHERE получаем ошибку:
ERROR: Variable var is not on file WORK.SET2.
- В операторе SET (несколько наборов данных), если переменная находится во всех наборах данных (var есть и в set1, и в set2), используем IF или WHERE
Дополнительные материалы: