Publicado el :
DATA Step CREATION_INTERNE

Ejemplos: Procesar grupos BY con las variables FIRST. y LAST. del paso DATA

Este código también está disponible en: Deutsch English Français
En espera de validación
Las variables FIRST. y LAST. son variables temporales creadas automáticamente por SAS©, que representan el principio y el final de cada grupo BY. Puede hacer referencia a las variables FIRST. y LAST. en el paso DATA, pero no forman parte del conjunto de datos de salida. La variable automática _N_ se utiliza como contador para las iteraciones del paso DATA, visible en el log. La instrucción IF/THEN ejecuta las instrucciones de forma condicional, permitiendo un procesamiento específico al principio o al final de los grupos BY. El valor de las variables FIRST. y LAST. depende del orden de clasificación de las variables BY. Una modificación de un valor anterior puede afectar el valor de FIRST.variable, incluso si el valor actual de la variable permanece igual.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines) o SASHELP.

1 Bloque de código
DATA STEP / PROC SORT Data
Explicación :
Este ejemplo muestra cómo SAS utiliza las variables automáticas FIRST.variable y LAST.variable para marcar el principio y el final de los grupos BY. Las variables FIRST. y LAST. son variables temporales creadas automáticamente por SAS, que representan el principio y el final de cada grupo BY. Puede hacer referencia a las variables FIRST. y LAST. en el paso DATA, pero no forman parte del conjunto de datos de salida. La variable automática _N_ se utiliza como contador para las iteraciones del paso DATA, visible en el log.
¡Copiado!
1DATA zip;
2INPUT State $ City $ ZipCode Street $20-29;
3DATALINES;
4FL Miami 33133 Rice St
5FL Miami 33133 Thomas Ave
6FL Miami 33133 Surrey Dr
7FL Miami 33133 Trade Ave
8FL Miami 33146 Nervia St
9FL Miami 33146 Corsica St
10FL Lakeland 33801 French Ave
11FL Lakeland 33809 Egret Dr
12AZ Tucson 85730 Domenic Ln
13AZ Tucson 85730 Gleeson Pl
14;
15PROC SORT DATA=zip;
16 BY State City ZipCode;
17RUN;
18 
19DATA zip2;
20 SET zip;
21 BY State City ZipCode;
22 put _n_= City State ZipCode
23 first.city= last.city=
24 first.state= last.state=
25 first.ZipCode= last.ZipCode= ;
26RUN;
2 Bloque de código
DATA STEP / PROC SORT Data
Explicación :
Cada una de las variables BY crea variables temporales: FIRST.State, LAST.State, FIRST.City, LAST.City, FIRST.ZipCode y LAST.ZipCode. Las variables FIRST. y LAST. son variables temporales creadas automáticamente por SAS, que representan el principio y el final de cada grupo BY. Puede hacer referencia a las variables FIRST. y LAST. en el paso DATA, pero no forman parte del conjunto de datos de salida. La variable automática _N_ se utiliza como contador para las iteraciones del paso DATA, visible en el log.
¡Copiado!
1DATA zip;
2INPUT State $ City $ ZipCode Street $20-29;
3DATALINES;
4FL Miami 33133 Rice St
5FL Miami 33133 Thomas Ave
6FL Miami 33133 Surrey Dr
7FL Miami 33133 Trade Ave
8FL Miami 33146 Nervia St
9FL Miami 33146 Corsica St
10FL Lakeland 33801 French Ave
11FL Lakeland 33809 Egret Dr
12AZ Tucson 85730 Domenic Ln
13AZ Tucson 85730 Gleeson Pl
14;
15PROC SORT DATA=zip;
16 BY City State ZipCode;
17RUN;
18 
19DATA zip2;
20 SET zip;
21 BY City State ZipCode;
22 put _n_= City State ZipCode
23 first.city= last.city=
24 first.state= last.state=
25 first.ZipCode= last.ZipCode= ;
26RUN;
3 Bloque de código
DATA STEP Data
Explicación :
Una modificación de un valor anterior puede afectar el valor de la variable FIRST., incluso si el valor actual de la variable permanece igual. En este ejemplo, los valores de las variables FIRST. y LAST. dependen del orden de clasificación y del valor de la variable BY. Para la observación 3, el valor de FIRST.Y se establece en 1 porque BLUEBERRY es un nuevo valor para Y. Este cambio en Y provoca que FIRST.Z también se establezca en 1, aunque el valor de Z no haya cambiado. Las variables FIRST. y LAST. son variables temporales creadas automáticamente por SAS, que representan el principio y el final de cada grupo BY. Puede hacer referencia a las variables FIRST. y LAST. en el paso DATA, pero no forman parte del conjunto de datos de salida. La variable automática _N_ se utiliza como contador para las iteraciones del paso DATA, visible en el log.
¡Copiado!
1DATA fruit;
2 INPUT x $ y $ 10-18 z $ 21-29;
3 DATALINES;
4apple banana coconut
5apple banana coconut
6apple blueberry citron
7apricot blueberry citron
8;
9 
10DATA _null_;
11 SET fruit;
12 BY x y z;
13 IF _N_=1 THEN put 'Grouped by X Y Z';
14 put _N_= x= first.x= last.x= first.y= last.y= first.z= last.z= ;
15RUN;
16 
17DATA _null_;
18 SET fruit;
19 BY y x z;
20 IF _N_=1 THEN put 'Grouped by Y X Z';
21 put _N_= first.y= last.y= first.x= last.x= first.z= last.z= ;
22RUN;
4 Bloque de código
DATA STEP / PROC SORT / PROC PRINT Data
Explicación :
El siguiente ejemplo calcula la masa salarial anual por departamento. Utiliza las instrucciones IF-THEN y los valores de las variables automáticas FIRST.variable y LAST.variable para reiniciar el valor de PAYROLL a 0 al principio de cada grupo BY y para escribir una observación después de procesar la última observación de un grupo BY. Las variables FIRST. y LAST. son variables temporales creadas automáticamente por SAS. Representan el principio y el final de cada grupo BY. La instrucción IF/THEN ejecuta las instrucciones de forma condicional.
¡Copiado!
1DATA salaries;
2 INPUT Department $ Name $ WageCategory $ WageRate;
3 DATALINES;
4BAD Carol Salaried 20000
5BAD Elizabeth Salaried 5000
6BAD Linda Salaried 7000
7BAD Thomas Salaried 9000
8BAD Lynne Hourly 230
9DDG Jason Hourly 200
10DDG Paul Salaried 4000
11PPD Kevin Salaried 5500
12PPD Amber Hourly 150
13PPD Tina Salaried 13000
14STD Helen Hourly 200
15STD Jim Salaried 8000
16;
17 
18PROC PRINT DATA=salaries;
19RUN;
20 
21PROC SORT DATA=salaries out=temp;
22 BY Department;
23RUN;
24 
25DATA budget (keep=Department Payroll);
26 SET temp;
27 BY Department;
28 IF WageCategory='Salaried' THEN YearlyWage=WageRate*12;
29 ELSE IF WageCategory='Hourly' THEN YearlyWage=WageRate*2000;
30 
31 IF first.Department THEN Payroll=0;
32 Payroll+YearlyWage;
33 IF last.Department;
34RUN;
35 
36PROC PRINT DATA=budget;
37 FORMAT Payroll dollar10.;
38 title 'Annual Payroll by Department';
39RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved