Использование IIF в Proc SQL - PullRequest
       7

Использование IIF в Proc SQL

0 голосов
/ 28 января 2019

Я хочу перевести следующий фрагмент кода для использования в Proc SQL для SAS:

SUM( IIF( INLIST( a.Department, DptGI, DptOncology, DptSurgery ), 1, 0 )) as TotalApts,;

Однако IIF() не распознается PROC SQL.

Могу ли я реализовать оператор if/else или какой-то еще CASE?

Кажется, все это не работает для меня.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

IIF() не является функцией SQL.Это может быть функция, которая реализована как расширение в некоторой версии SQL, скорее всего, созданной Microsoft.

Я тоже не уверен, что такое INLIST().Я предполагаю, что это какой-то тип проверки того, находится ли первый аргумент в других аргументах.Если это так, вы можете заменить его одной из функций SAS WHICHN() или WHICHC(), в зависимости от того, являются ли значения в переменных числами или строками.

Нормальный синтаксис SQL для этого типа операцииCASE

SUM( case when ( a.Department= DptGI) then 1
          when ( a.Department=DptOncology) then 1
          when ( a.Department=DptSurgery ) then 1
      else 0 end
    ) as TotalApts

Если вы просто пытаетесь получить результат 1 или 0 и у вас все в порядке с использованием специального синтаксиса SAS, то вы можете просто суммировать результат логического выражения.

SUM( (a.Department=DptGI) or (a.Department=DptOncology)
     or (a.Department=DptSurgery)) as TotalApts

Теперь, если DPTGI и другие значения являются константами, а не переменными, вы можете использовать оператор IN.

SUM(a.Department in ('GI','Oncology','Surgery')) as TotalApts
0 голосов
/ 28 января 2019

SAS-версия IIF имеет значение IFN или IFC, в зависимости от числа или символа возвращаемое значение (не имеет значения, что представляют собой входные столбцы, просточто хочешь обратно).Пока вы используете его в родном SAS PROC SQL (а не в сквозном SQL), это должно работать.

Однако INLIST также не является функцией SAS, вам придется переписать эток обычному оператору in.

Вы также можете использовать операторы case when, если вы хотите помочь с ними, вы можете опубликовать свой пробный код.

...