Нулевое заявление в SAS - PullRequest
       35

Нулевое заявление в SAS

0 голосов
/ 26 февраля 2019

У меня есть следующая таблица

Id   Values    
 1     A          
 1     A          
 1     B          
 2     @          
 2     @
 2     @
 3     A
 3     A
 3     A
 3     A
 3     @
 4     B
 4     B
 4     B

Вывод:

Id   Values
 1     @
 2     @
 3     A
 4     B

В каждой группе Id, если все значения @, я хочу установить значение для этого Id равным @иначе, если все значения для Id одинаковы (игнорируя @s) (например, все как), установите значение для этого Id равным этому значению (A), иначе установите для id значение @.

Этот вопрос былответил в sqlserver и я пытаюсь реплицировать код в SAS мне нужно сделать это в SAS.Но как-то NULLIF в SAS не работает.Кто-нибудь может мне помочь, как я могу сделать это в SAS?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Я обнаружил, что NULLIF включен в Fedsql Proc, и когда я запустил следующий код, он работал.

proc fedsql;
select  id,
case    when    min(NULLIF(values, '@')) = max(NULLIF(values, '@'))
        and     min(NULLIF(values, '@')) ^= '@'
        then    min(NULLIF(values, '@'))
        else    '@'
        end as result
        from    mytable
        group by id;
run;
0 голосов
/ 26 февраля 2019

Одним из способов является подсчет количества distinct значений в группе и присвоение результирующего значения max(value), когда есть только одно значение, и @ в противном случае.

 proc sql;
   create table want as
   select id,
     case 
       when count(
          distinct 
          case 
            when value ne '@' then value
          end
          ) = 1 then max(value)
       else '@'
     end as value
   from have
   group by id
  ;
...