order - contents - proc freq ejemplo
SAS 9.3 Problemas de Clasificación de Proc.(Clasificar/Clasificar bloque de ruta) (3)
Estoy trabajando con un conjunto de datos en este formato:
Column 1 (What I Have), Column 2 (What I need to see)
8 1
8 1
8 1
9 2
9 2
9 2
10 3
10 3
10 3
11 4
11 4
12 5
13 6
14 7
14 7
14 7
Intenta usar el rango de Proc para generar el segundo código de columna:
Proc Rank data=Have
out=Want
ties=low;
Var Column1;
ranks Column2;
run;
La salida que recibo se ve así:
Column1 (What I Have) Column2 (What I get)
8 1
8 1
8 1
9 199
9 199
9 199
10 415
10 415
10 415
11 613
11 613
12 823
13 1015
14 1222
14 1222
14 1222
Según lo que he leído y escuchado, el primer conjunto de datos es lo que espero sea mi resultado.
¿Hay un error en el código o las expectativas que ha llevado a un resultado como el que estoy viendo? Además, ¿existe una mejor manera de generar un rango secuencial para una columna de datos numéricos secuenciales?
Alternativamente con una retención implícita.
DATA WANT;
SET HAVE;
BY COLUMN1;
IF _N_ = 0 THEN
COLUMN2 = 0;
IF FIRST.COLUMN1 THEN
COLUMN2 + 1;
RUN;
Puede hacer esto en un Paso de datos suponiendo que está bien ordenar por Columna1.
proc sort data=have;
by column1;
run;
data want;
set have;
by column1;
retain column2 ;
if _n_ = 0 then
column2 = 0;
if first.column1 then
column2 = column2 + 1;
run;
Quería decirte que descubrí cómo usar esto.
La clave está en la declaración Ties = (Low o High o Mean or Dense).
Aquí está el Nuevo Código que Funciona.
Proc Rank data=Have
out=Want
ties=dense;
Var Column1;
ranks Column2;
run;
Ahora Mi conjunto de datos agrupa todos los valores similares y les da el mismo conteo. La columna 2 se genera con los valores adecuados. La documentación está aquí:
Desplácese hasta la parte inferior para ver las características de Ties