Cree una variable ficticia basada en el número de apariciones variables usando SAS
-
20-12-2019 - |
Pregunta
Estoy tratando de crear una variable ficticia A para indicar el número de apariciones de ID.Si la identificación aparece exactamente dos veces, entonces se iguala 0;Si la identificación aparece más de 2 veces, entonces es igual a 1.
Mi salida deseada es la siguiente:
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
Mi código es:
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;
Pero la salida es incorrecta.
Solución
No puede usar suma (cuenta) para sumar el recuento en múltiples observaciones.En su lugar, debe contar primero las observaciones y luego fusionar los conteos en los datos originales.
Solución de datos de datos
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 solo tendrá la última observación de cada identificación.Queremos que porque la última observación tiene el Condado de la cantidad de observaciones por ID.
Este paso fusiona los datos originales "Datos" con los conteos de "NewData" y calcula a.
data newdata2;
merge data newdata;
by ID;
if count=2 then A=0;
if count>2 then A=1;
drop count;
run;
proc Solución SQL Puede hacerlo aún más rápidamente 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 que las estadísticas de resumen, como el conteo () se calculan por identificación, por lo que el count(*)
significa observaciones de conteo en cada identificación.(case when count(*) = 2 then 0 else 1 end) as a
crea una variable a.Si el recuento para una identificación determinada es 2, a una toma el valor de 0, de lo contrario, un valor de 1.