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

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

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 равным @ else, если все значения для Id одинаковы (игнорируя @s) (например, все как), установите значение для этого Id таким, чтобы значение (A) иначе установите значение id в @.

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

2 ответа

Одним из способов является подсчет количества 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
  ;

Я обнаружил, что 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;
Другие вопросы по тегам