Нулевое заявление в 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;