Как использовать null как условие в выражении if then else в SAS? - PullRequest
2 голосов
/ 06 августа 2020

Лог c: Если переменная X равна нулю, то выводится в набор данных DATA. Но «is null» нельзя использовать в выражении «if» в SAS. Как мне реализовать logi c в SAS?

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Ответ Дирка Хорстена попадает точно в цель. Другой вариант, который может быть быстрее:

data FILTERED;
   set UNFILTERED;
   where missing(X);
run;

Синтаксис шага данных where близок к предложению SQL where. То есть он работает с переменными, которые уже существуют в наборе данных (а не с теми, которые вычисляются в рамках пошаговой обработки данных). Если набор данных SAS проиндексирован, по переменным, указанным в операторе where, вы часто можете получить более высокую производительность.

1 голос
/ 06 августа 2020

Синтаксис шага данных отличается от синтаксиса sql; (Это потому, что SAS старше SQL)

Самый правильный ответ

data FILTERED;
   set UNFILTERED;
   if missing(X) then output;
run;

Альтернативы

Сокращение

Вы также можете использовать if missing(X);, сокращенное обозначение if not missing(X) then delete;.

Предложение where

См. Ответ пользователя itsMeInMiami и мой ответ

Использование литералов

В символьных переменных SAS нельзя использовать специальное значение, указывающее, что они отсутствуют. if missing(MyCharVar) на самом деле является сокращением для if MyCharVar = ''.

Numeri c переменных, однако может принимать разные значения "null", подробнее здесь .

На практике используется только один, и он имеет буквальное значение .:

  • это начальное значение числовой переменной c перед присвоением
  • это результат деления на ноль
  • это результат вычислений с отсутствующими переменными
  • это результат внешнего соединения, если в таблице нет наблюдения, значение должно быть
...