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é !
data zip;
input State $ City $ ZipCode Street $20-29;
datalines;
FL Miami 33133 Rice St
FL Miami 33133 Thomas Ave
FL Miami 33133 Surrey Dr
FL Miami 33133 Trade Ave
FL Miami 33146 Nervia St
FL Miami 33146 Corsica St
FL Lakeland 33801 French Ave
FL Lakeland 33809 Egret Dr
AZ Tucson 85730 Domenic Ln
AZ Tucson 85730 Gleeson Pl
;
proc sort data=zip;
by State City ZipCode;
run;
data zip2;
set zip;
by State City ZipCode;
put _n_= City State ZipCode
first.city= last.city=
first.state= last.state=
first.ZipCode= last.ZipCode= ;
run;
1
DATA zip;
2
INPUT State $ City $ ZipCode Street $20-29;
3
DATALINES;
4
FL Miami 33133 Rice St
5
FL Miami 33133 Thomas Ave
6
FL Miami 33133 Surrey Dr
7
FL Miami 33133 Trade Ave
8
FL Miami 33146 Nervia St
9
FL Miami 33146 Corsica St
10
FL Lakeland 33801 French Ave
11
FL Lakeland 33809 Egret Dr
12
AZ Tucson 85730 Domenic Ln
13
AZ Tucson 85730 Gleeson Pl
14
;
15
PROC SORTDATA=zip;
16
BY State City ZipCode;
17
RUN;
18
19
DATA 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= ;
26
RUN;
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é !
data zip;
input State $ City $ ZipCode Street $20-29;
datalines;
FL Miami 33133 Rice St
FL Miami 33133 Thomas Ave
FL Miami 33133 Surrey Dr
FL Miami 33133 Trade Ave
FL Miami 33146 Nervia St
FL Miami 33146 Corsica St
FL Lakeland 33801 French Ave
FL Lakeland 33809 Egret Dr
AZ Tucson 85730 Domenic Ln
AZ Tucson 85730 Gleeson Pl
;
proc sort data=zip;
by City State ZipCode;
run;
data zip2;
set zip;
1
DATA zip;
2
INPUT State $ City $ ZipCode Street $20-29;
3
DATALINES;
4
FL Miami 33133 Rice St
5
FL Miami 33133 Thomas Ave
6
FL Miami 33133 Surrey Dr
7
FL Miami 33133 Trade Ave
8
FL Miami 33146 Nervia St
9
FL Miami 33146 Corsica St
10
FL Lakeland 33801 French Ave
11
FL Lakeland 33809 Egret Dr
12
AZ Tucson 85730 Domenic Ln
13
AZ Tucson 85730 Gleeson Pl
14
;
15
PROC SORTDATA=zip;
16
BY City State ZipCode;
17
RUN;
18
19
DATA 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é !
data fruit;
input x $ y $ 10-18 z $ 21-29;
datalines;
apple banana coconut
apple banana coconut
apple blueberry citron
apricot blueberry citron
;
data _null_;
set fruit;
by x y z;
if _N_=1 then put 'Grouped by X Y Z';
put _N_= x= first.x= last.x= first.y= last.y= first.z= last.z= ;
run;
data _null_;
set fruit;
by y x z;
if _N_=1 then put 'Grouped by Y X Z';
put _N_= first.y= last.y= first.x= last.x= first.z= last.z= ;
run;
1
DATA fruit;
2
INPUT x $ y $ 10-18 z $ 21-29;
3
DATALINES;
4
apple banana coconut
5
apple banana coconut
6
apple blueberry citron
7
apricot blueberry citron
8
;
9
10
DATA _null_;
11
SET fruit;
12
BY x y z;
13
IF _N_=1THEN put 'Grouped by X Y Z';
14
put _N_= x= first.x= last.x= first.y= last.y= first.z= last.z= ;
15
RUN;
16
17
DATA _null_;
18
SET fruit;
19
BY y x z;
20
IF _N_=1THEN put 'Grouped by Y X Z';
21
put _N_= first.y= last.y= first.x= last.x= first.z= last.z= ;
22
RUN;
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é !
data salaries;
input Department $ Name $ WageCategory $ WageRate;
datalines;
BAD Carol Salaried 20000
BAD Elizabeth Salaried 5000
BAD Linda Salaried 7000
BAD Thomas Salaried 9000
BAD Lynne Hourly 230
DDG Jason Hourly 200
DDG Paul Salaried 4000
PPD Kevin Salaried 5500
PPD Amber Hourly 150
PPD Tina Salaried 13000
STD Helen Hourly 200
STD Jim Salaried 8000
;
proc sort data=salaries out=temp;
by Department;
run;
data budget (keep=Department Payroll);
set temp;
by Department;
if WageCategory='Salaried' then YearlyWage=WageRate*12;
else if WageCategory='Hourly' then YearlyWage=WageRate*2000;
if first.Department then Payroll=0;
Payroll+YearlyWage;
if last.Department;
run;
proc print data=budget;
format Payroll dollar10.;
title 'Annual Payroll by Department';
run;
1
DATA salaries;
2
INPUT Department $ Name $ WageCategory $ WageRate;
3
DATALINES;
4
BAD Carol Salaried 20000
5
BAD Elizabeth Salaried 5000
6
BAD Linda Salaried 7000
7
BAD Thomas Salaried 9000
8
BAD Lynne Hourly 230
9
DDG Jason Hourly 200
10
DDG Paul Salaried 4000
11
PPD Kevin Salaried 5500
12
PPD Amber Hourly 150
13
PPD Tina Salaried 13000
14
STD Helen Hourly 200
15
STD Jim Salaried 8000
16
;
17
18
PROC SORTDATA=salaries out=temp;
19
BY Department;
20
RUN;
21
22
DATA budget (keep=Department Payroll);
23
SET temp;
24
BY Department;
25
IF WageCategory='Salaried'THEN YearlyWage=WageRate*12;
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.
« 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. »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.