Publicado el :
Manipulación de datos CREATION_INTERNE

Ejemplos: Procesamiento de grupos BY con variables FIRST. y LAST. del paso de datos

Este código también está disponible en: Deutsch English Français
En espera de validación
El análisis funcional se centra en cómo SAS© utiliza las variables temporales FIRST.<variable> y LAST.<variable> para marcar el inicio y el final de cada grupo BY. Estas variables son generadas automáticamente por SAS© y toman el valor 1 al inicio (FIRST.) o al final (LAST.) de un grupo, y 0 en caso contrario. Su comportamiento está fuertemente influenciado por el orden de clasificación de los datos. Los ejemplos ilustran su uso en el DATA step para identificar los límites de los grupos y realizar acciones específicas, como la inicialización de contadores o la escritura de resultados agregados. Es crucial tener en cuenta que estas variables son temporales y no forman parte del conjunto de datos de salida. La variable automática _N_ también se utiliza para seguir las iteraciones del paso de datos.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines).

1 Bloque de código
DATA STEP / PROC SORT Data
Explicación :
Este ejemplo muestra cómo SAS utiliza las variables FIRST.<variable> y LAST.<variable> para marcar el inicio y el final de los grupos BY. Las variables FIRST. y LAST. son variables temporales creadas automáticamente por SAS, que representan el inicio y el final de cada grupo BY. Pueden ser referenciadas en el paso de datos pero no forman parte del conjunto de datos de salida. La variable automática _N_ se utiliza como un contador para las iteraciones del paso de datos.
¡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 :
Este ejemplo ilustra que cada variable 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 inicio y el final de cada grupo BY. Pueden ser referenciadas en el paso de datos pero no forman parte del conjunto de datos de salida. La variable automática _N_ se utiliza como un contador para las iteraciones del paso de datos.
¡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;
16BY City State ZipCode;
17RUN;
18 
19DATA zip2;
20 SET zip;
3 Bloque de código
DATA STEP Data
¡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 Data
¡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 SORT DATA=salaries out=temp;
19 BY Department;
20RUN;
21 
22DATA budget (keep=Department Payroll);
23 SET temp;
24 BY Department;
25 IF WageCategory='Salaried' THEN YearlyWage=WageRate*12;
26 ELSE IF WageCategory='Hourly' THEN YearlyWage=WageRate*2000;
27 
28 IF first.Department THEN Payroll=0;
29 Payroll+YearlyWage;
30 IF last.Department;
31RUN;
32 
33PROC PRINT DATA=budget;
34 FORMAT Payroll dollar10.;
35 title 'Annual Payroll by Department';
36RUN;
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