Cree una variable ficticia basada en el número de apariciones variables usando SAS

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

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top