Creare una variabile fittizia in base al numero di apparenze variabili utilizzando SAS
-
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.
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;
.
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.