Creare una variabile fittizia in base al numero di apparenze variabili utilizzando SAS

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

  •  20-12-2019
  •  | 
  •  

Domanda

Sto cercando di creare una variabile fittizia A per indicare il numero di apparizioni ID.Se l'ID appare esattamente due volte, allora un uguale a 0;Se l'ID appare più di 2 volte, quindi è uguale a 1.

La mia uscita desiderata è la seguente:

  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
.

Il mio codice è:

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

Ma l'uscita non è corretta.

È stato utile?

Soluzione

Non è possibile utilizzare Sum (Conte) per riassumere il conteggio su più osservazioni.Invece devi prima contare le osservazioni, quindi unire i conteggi nei dati originali.

Soluzione di fase dati

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 che NewData avrà solo l'ultima osservazione per ogni ID.Lo vogliamo perché l'ultima osservazione ha la contea del numero di osservazioni per ID.

Questo passaggio unisce i dati originali "Dati" con i conteggi da "NewData" e calcola A.

data newdata2;
merge data newdata;
by ID;
if count=2 then A=0;
if count>2 then A=1;
drop count;
run;
.

Soluzione PROC SQL Puoi farlo ancora più rapidamente con 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 che le statistiche di riepilogo come il conteggio () sono calcolate da ID, quindi il count(*) significa conteggio delle osservazioni in ciascun ID.(case when count(*) = 2 then 0 else 1 end) as a crea una variabile a.Se il conteggio per un determinato ID è 2, allora A prende il valore di 0, altrimenti un valore prende il valore di 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top