Crie uma variável fictícia com base no número de aparências de variáveis usando SAS
-
20-12-2019 - |
Pergunta
Estou tentando criar uma variável fictícia A para indicar o número de ocorrências de ID.Se ID aparecer exatamente duas vezes, então A é igual a 0;se ID aparecer mais de 2 vezes, então A é igual a 1.
Minha saída desejada é a seguinte:
ID YEAR A
1078 1989 0
1078 1999 0
1161 1969 0
1161 2002 0
1230 1995 0
1230 2002 0
1279 1996 0
1279 2003 0
1447 1993 0
1447 2001 0
1487 1967 1
1487 2008 1
1487 2009 1
1678 1979 0
1678 2002 0
Meu código é:
data new data;
set data;
by ID YEAR;
if First.ID then count=0;
count+1;
run;
data newdata;
set newdata;
by ID YEAR count;
if sum(count)=3 then A=0;
if sum(count)>3 then A=1;
run;
Mas a saída está incorreta.
Solução
Você não pode usar sum(count) para somar a contagem em múltiplas observações.Em vez disso, você precisa primeiro contar as observações e depois mesclar as contagens nos dados originais.
Solução de etapa de dados
data newdata;
set data;
by ID YEAR;
if First.ID then count=0;
count+1;
if last.id then output;
drop year;
run;
if last.id then output
significa que newdata terá apenas a última observação para cada id.Queremos isso porque a última observação tem o condado do número de observações por id.
Esta etapa mescla os dados originais "dados" com as contagens de "novos dados" e calcula a.
data newdata2;
merge data newdata;
by ID;
if count=2 then A=0;
if count>2 then A=1;
drop count;
run;
solução procsqlVocê pode fazer isso ainda mais rapidamente com proc sql:
proc sql;
create table newdata as
select id, year, (case when count(*) = 2 then 0 else 1 end) as a
from data
group by id;
quit;
group by id
significa que estatísticas resumidas como count() são calculadas por id, então o count(*)
significa contar observações em cada id. (case when count(*) = 2 then 0 else 1 end) as a
cria uma variável a.Se a contagem para um determinado ID for 2, então a assume o valor 0, caso contrário, a assume o valor 1.