Créez une variable factice basée sur le nombre d'apparitions de variables à l'aide de SAS

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

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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top