Veröffentlicht am :
DATA Step CREATION_INTERNE

Beispiele: Verarbeiten von BY-Gruppen mit den automatischen Variablen FIRST. und LAST. im DATA-Schritt

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Die Variablen FIRST. und LAST. sind temporäre Variablen, die automatisch von SAS© erstellt werden und den Anfang und das Ende jeder BY-Gruppe darstellen. Sie können die Variablen FIRST. und LAST. im DATA-Schritt referenzieren, aber sie sind nicht Teil des Ausgabedatensatzes. Die automatische Variable _N_ wird als Zähler für die Iterationen des DATA-Schritts verwendet und ist im Log sichtbar. Die IF/THEN-Anweisung führt Anweisungen bedingt aus und ermöglicht eine spezifische Verarbeitung am Anfang oder Ende von BY-Gruppen. Der Wert der Variablen FIRST. und LAST. hängt von der Sortierreihenfolge der BY-Variablen ab. Eine Änderung eines vorherigen Wertes kann den Wert der FIRST.variable beeinflussen, auch wenn der aktuelle Wert der Variablen gleich bleibt.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden generierte Daten (Datalines) oder SASHELP.

1 Codeblock
DATA STEP / PROC SORT Data
Erklärung :
Dieses Beispiel zeigt, wie SAS die automatischen Variablen FIRST.variable und LAST.variable verwendet, um den Anfang und das Ende von BY-Gruppen zu kennzeichnen. Die Variablen FIRST. und LAST. sind temporäre Variablen, die automatisch von SAS erstellt werden und den Anfang und das Ende jeder BY-Gruppe darstellen. Sie können die Variablen FIRST. und LAST. im DATA-Schritt referenzieren, aber sie sind nicht Teil des Ausgabedatensatzes. Die automatische Variable _N_ wird als Zähler für die Iterationen des DATA-Schritts verwendet und ist im Log sichtbar.
Kopiert!
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 Codeblock
DATA STEP / PROC SORT Data
Erklärung :
Jede der BY-Variablen erstellt temporäre Variablen: FIRST.State, LAST.State, FIRST.City, LAST.City, FIRST.ZipCode und LAST.ZipCode. Die Variablen FIRST. und LAST. sind temporäre Variablen, die automatisch von SAS erstellt werden und den Anfang und das Ende jeder BY-Gruppe darstellen. Sie können die Variablen FIRST. und LAST. im DATA-Schritt referenzieren, aber sie sind nicht Teil des Ausgabedatensatzes. Die automatische Variable _N_ wird als Zähler für die Iterationen des DATA-Schritts verwendet und ist im Log sichtbar.
Kopiert!
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 Codeblock
DATA STEP Data
Erklärung :
Eine Änderung eines vorherigen Wertes kann den Wert der Variablen FIRST. beeinflussen, auch wenn der aktuelle Wert der Variablen gleich bleibt. In diesem Beispiel hängen die Werte der Variablen FIRST. und LAST. von der Sortierreihenfolge und dem Wert der BY-Variablen ab. Für Beobachtung 3 wird der Wert von FIRST.Y auf 1 gesetzt, da BLUEBERRY ein neuer Wert für Y ist. Diese Änderung in Y führt dazu, dass FIRST.Z ebenfalls auf 1 gesetzt wird, auch wenn der Wert von Z sich nicht geändert hat. Die Variablen FIRST. und LAST. sind temporäre Variablen, die automatisch von SAS erstellt werden und den Anfang und das Ende jeder BY-Gruppe darstellen. Sie können die Variablen FIRST. und LAST. im DATA-Schritt referenzieren, aber sie sind nicht Teil des Ausgabedatensatzes. Die automatische Variable _N_ wird als Zähler für die Iterationen des DATA-Schritts verwendet und ist im Log sichtbar.
Kopiert!
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 Codeblock
DATA STEP / PROC SORT / PROC PRINT Data
Erklärung :
Das folgende Beispiel berechnet die jährliche Gehaltsabrechnung pro Abteilung. Es verwendet IF-THEN-Anweisungen und die Werte der automatischen Variablen FIRST.variable und LAST.variable, um den Wert von PAYROLL zu Beginn jeder BY-Gruppe auf 0 zurückzusetzen und eine Beobachtung nach der Verarbeitung der letzten Beobachtung einer BY-Gruppe zu schreiben. Die Variablen FIRST. und LAST. sind temporäre Variablen, die automatisch von SAS erstellt werden. Sie stellen den Anfang und das Ende jeder BY-Gruppe dar. Die IF/THEN-Anweisung führt Anweisungen bedingt aus.
Kopiert!
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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved