Publié le :

Exemples : Traitement des groupes BY avec les variables FIRST. et LAST. du pas de données

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'analyse fonctionnelle se concentre sur la manière dont SAS© utilise les variables temporaires FIRST.<variable> et LAST.<variable> pour marquer le début et la fin de chaque groupe BY. Ces variables sont générées automatiquement par SAS© et prennent la valeur 1 au début (FIRST.) ou à la fin (LAST.) d'un groupe, et 0 sinon. Leur comportement est fortement influencé par l'ordre de tri des données. Les exemples illustrent leur utilisation dans le DATA step pour identifier les frontières des groupes et effectuer des actions spécifiques, telles que l'initialisation de compteurs ou l'écriture de résultats agrégés. Il est crucial de noter que ces variables sont temporaires et ne font pas partie du jeu de données de sortie. La variable automatique _N_ est également utilisée pour suivre les itérations du pas de données.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines).

1 Bloc de code
DATA STEP / PROC SORT Data
Explication :
Cet exemple montre comment SAS utilise les variables FIRST.<variable> et LAST.<variable> pour marquer le début et la fin des groupes BY. Les variables FIRST. et LAST. sont des variables temporaires créées automatiquement par SAS, représentant le début et la fin de chaque groupe BY. Elles peuvent être référencées dans le pas de données mais ne font pas partie du jeu de données de sortie. La variable automatique _N_ est utilisée comme un compteur pour les itérations du pas de données.
Copié !
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 Bloc de code
DATA STEP / PROC SORT Data
Explication :
Cet exemple illustre que chaque variable BY crée des variables temporaires (FIRST.State, LAST.State, FIRST.City, LAST.City, FIRST.ZipCode, et LAST.ZipCode). Les variables FIRST. et LAST. sont des variables temporaires créées automatiquement par SAS, représentant le début et la fin de chaque groupe BY. Elles peuvent être référencées dans le pas de données mais ne font pas partie du jeu de données de sortie. La variable automatique _N_ est utilisée comme un compteur pour les itérations du pas de données.
Copié !
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 Bloc de code
DATA STEP Data
Explication :
Cet exemple démontre qu'une modification d'une valeur précédente peut affecter la valeur de FIRST.<variable>, même si la valeur actuelle de la variable reste la même. Les valeurs de FIRST.<variable> et LAST.<variable> dépendent de l'ordre de tri et de la valeur de la variable BY. Pour l'observation 3, la valeur de FIRST.Y est définie à 1 car BLUEBERRY est une nouvelle valeur pour Y, ce qui entraîne également la définition de FIRST.Z à 1, même si la valeur de Z n'a pas changé. Les variables FIRST. et LAST. sont temporaires, créées automatiquement par SAS, et représentent le début et la fin de chaque groupe BY.
Copié !
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 Bloc de code
DATA STEP / PROC SORT Data
Explication :
Cet exemple calcule la masse salariale annuelle par département. Il utilise des instructions IF-THEN et les valeurs des variables automatiques FIRST.<variable> et LAST.<variable> pour réinitialiser la valeur de PAYROLL à 0 au début de chaque groupe BY et pour écrire une observation après le traitement de la dernière observation d'un groupe BY. Les variables FIRST. et LAST. sont temporaires et créées automatiquement par SAS. L'instruction IF/THEN exécute les instructions de manière conditionnelle.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved


Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Utilisez toujours le duo FIRST. pour initialiser vos compteurs à zéro (ex: if first.id then total=0;) et LAST. pour extraire le résultat final (ex: if last.id then output;). Sans cette rigueur, vous risquez d'additionner les données de différents groupes ou de générer des tables inutilement volumineuses. »