4.2 Оператор WHERE

Оператор WHERE используется для определения нужного вам подмножества из данного датасета.

Например, выбрать из датасета Analysis всех пациентов с нормальным уровнем гемоглобина в крови:

Lesson4.2.1

Для этого используем оператор 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 – длительность приема (дни)).

Lesson4.2.2
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 like 'I%';

    Result: IRON, IBUPROFEN, INSULIN;

    where CMDECOD like '%L';

    Result: FISH OIL, PARACETAMOL, TADALAFIL;

  • where TRT like 'Q__';

    Result: QVA, QKP, QCM;

Оператор подобия =* для выборки строк, содержащих варианты написания указанного слова. 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 – это оператор сравнения, который используется для поиска символьных или числовых значений, которые равны заданным значениям из списка. Список значений, которые нам надо отобрать, заключается в скобки и разделяется запятой или пробелом.

Lesson4.2.3

Также с помощью оператора IN можно задать промежуток числовых значений для выборки. Воспользуемся этим для создания дата сета Normal_dose:

data Dose;
    set Medications;
    where CMDUR in (10:17);
run;

Полученный дата сет:

Lesson4.2.4

Важно заметить, что с помощью оператора 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

Lesson4.2.5

Но не всегда мы можем так легко заменять IF на WHERE , и на оборот.

Рассмотрим случаи, когда можно пользоваться только оператором IF, или только оператором WHERE, или же и тем, и тем.

Дополнительные материалы: