Créez une variable factice basée sur le nombre d'apparitions de variables à l'aide de SAS
-
20-12-2019 - |
Question
J'essaie de créer une variable factice A pour indiquer le nombre d'apparitions d'identité.Si ID apparaît exactement deux fois, alors A est égal à 0 ;si ID apparaît plus de 2 fois, alors A est égal à 1.
Mon résultat souhaité est le suivant :
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
Mon code est :
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;
Mais le résultat est incorrect.
La solution
Vous ne pouvez pas utiliser sum(count) pour additionner le nombre de plusieurs observations.Au lieu de cela, vous devez d'abord compter les observations, puis fusionner les décomptes dans les données d'origine.
Solution d'étape de données
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
signifie que newdata n'aura que la dernière observation pour chaque identifiant.Nous voulons cela parce que la dernière observation a le comté du nombre d'observations par identifiant.
Cette étape fusionne les données d'origine "data" avec les décomptes de "newdata" et calcule a.
data newdata2;
merge data newdata;
by ID;
if count=2 then A=0;
if count>2 then A=1;
drop count;
run;
solution proc sqlVous pouvez le faire encore plus rapidement avec 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
signifie que les statistiques récapitulatives telles que count() sont calculées par id, donc le count(*)
signifie compter les observations dans chaque identifiant. (case when count(*) = 2 then 0 else 1 end) as a
crée une variable a.Si le compte pour un identifiant donné est 2, alors a prend la valeur 0, sinon a prend la valeur 1.