Crie uma variável fictícia com base no número de aparências de variáveis ​​usando SAS

StackOverflow https://stackoverflow.com//questions/25004053

  •  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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top