Die Beispiele verwenden generierte Daten (Datalines) oder SASHELP.
1 Codeblock
DATA STEP / PROC SORT Data
Erklärung : Dieses Beispiel veranschaulicht ein einfaches Match-Merge, bei dem die MERGE-Anweisung zusammen mit der BY-Anweisung verwendet wird, um zwei Datasets ('animal' und 'plant') basierend auf der gemeinsamen Variablen 'common' zu verknüpfen. Dies ist ein Eins-zu-Eins-Merge, da keine der Eingabe-Datasets duplizierte Werte für die BY-Variable enthalten. Die Datasets werden vor dem Merge zuerst nach 'common' sortiert.
Kopiert!
data animal;
input common $ animal$;
datalines;
a Ant
b Bird
c Cat
d Dog
e Eagle
f Frog
;
run;
data plant;
input common $ plant$;
datalines;
a Apple
b Banana
c Coconut
d Dewberry
e Eggplant
f Fig
;
run;
proc sort data=animal; by common; run;
proc sort data=plant; by common; run;
data matchmerge;
merge animal plant;
by common;
run;
proc print data=matchmerge; run;
1
DATA animal;
2
INPUT common $ animal$;
3
DATALINES;
4
a Ant
5
b Bird
6
c Cat
7
d Dog
8
e Eagle
9
f Frog
10
;
11
RUN;
12
13
DATA plant;
14
INPUT common $ plant$;
15
DATALINES;
16
a Apple
17
b Banana
18
c Coconut
19
d Dewberry
20
e Eggplant
21
f Fig
22
;
23
RUN;
24
25
PROC SORTDATA=animal; BY common; RUN;
26
PROC SORTDATA=plant; BY common; RUN;
27
28
DATA matchmerge;
29
MERGE animal plant;
30
BY common;
31
RUN;
32
PROC PRINTDATA=matchmerge; RUN;
2 Codeblock
DATA STEP / PROC PRINT Data
Erklärung : Dieses Beispiel zeigt ein Eins-zu-Viele-Merge. Die Datasets 'one' und 'many' enthalten die Variablen 'ID' und 'state'. 'ID' ist die BY-Variable. Wenn 'state' keine BY-Variable ist, überschreibt ihr Wert aus dem Dataset 'one' (als zweites aufgeführt) den ersten Wert des Datasets 'many' für jede BY-Gruppe, aber nicht die nachfolgenden. Um alle 'state'-Werte in der BY-Gruppe zu ersetzen, muss die Variable 'state' aus dem Dataset 'many' vor dem Merge gelöscht oder umbenannt werden, wie im zweiten Codeblock ('data solution') gezeigt.
Kopiert!
data one;
input ID state$;
datalines;
1 AZ
2 MA
3 WA
4 WI
;
run;
data many;
input ID city $ state$;
datalines;
1 Phoenix Ariz
2 Boston Mass
2 Foxboro Mass
3 Olympia Mass
3 Seattle Wash
3 Spokane Wash
4 Madison Wis
4 Milwaukee Wis
4 Madison Wis
4 Hurley Wis
;
run;
proc sort data=one; by ID; run;
proc sort data=many; by ID; run;
data three;
merge many one;
by ID;
run;
proc print data=three noobs; run;
title;
data solution;
merge many(drop=state) one;
by ID;
run;
proc print data=solution noobs; run;
1
DATA one;
2
INPUT ID state$;
3
DATALINES;
4
1 AZ
5
2 MA
6
3 WA
7
4 WI
8
;
9
RUN;
10
11
DATA many;
12
INPUT ID city $ state$;
13
DATALINES;
14
1 Phoenix Ariz
15
2 Boston Mass
16
2 Foxboro Mass
17
3 Olympia Mass
18
3 Seattle Wash
19
3 Spokane Wash
20
4 Madison Wis
21
4 Milwaukee Wis
22
4 Madison Wis
23
4 Hurley Wis
24
;
25
RUN;
26
27
PROC SORTDATA=one; BY ID; RUN;
28
PROC SORTDATA=many; BY ID; RUN;
29
30
DATA three;
31
MERGE many one;
32
BY ID;
33
RUN;
34
PROC PRINTDATA=three noobs; RUN;
35
title;
36
37
DATA solution;
38
MERGE many(drop=state) one;
39
BY ID;
40
RUN;
41
PROC PRINTDATA=solution noobs; RUN;
3 Codeblock
DATA STEP / PROC SORT Data
Erklärung : Dieses Beispiel veranschaulicht ein Viele-zu-Eins-Merge, wenn die Eingabe-Datasets 'animalDupes' und 'plantDupes' doppelte Werte für die BY-Variable 'common' enthalten. SAS kombiniert alle Beobachtungen jeder BY-Gruppe und behält dabei die Werte aller Variablen bei. Die Datasets werden vor dem Merge nach 'common' sortiert.
Kopiert!
data animalDupes;
input common $ animal1$;
datalines;
a Ant
a Ape
b Bird
c Cat
d Dog
e Eagle
;
run;
data plantDupes;
input common $ plant1$;
datalines;
a Apple
b Banana
c Coconut
c Celery
d Dewberry
e Eggplant
;
run;
proc sort data=animalDupes; by common; run;
proc sort data=plantDupes; by common; run;
data matchmerge;
merge animalDupes plantDupes;
by common;
run;
proc print data=matchmerge; run;
1
DATA animalDupes;
2
INPUT common $ animal1$;
3
DATALINES;
4
a Ant
5
a Ape
6
b Bird
7
c Cat
8
d Dog
9
e Eagle
10
;
11
RUN;
12
13
DATA plantDupes;
14
INPUT common $ plant1$;
15
DATALINES;
16
a Apple
17
b Banana
18
c Coconut
19
c Celery
20
d Dewberry
21
e Eggplant
22
;
23
RUN;
24
25
PROC SORTDATA=animalDupes; BY common; RUN;
26
PROC SORTDATA=plantDupes; BY common; RUN;
27
28
DATA matchmerge;
29
MERGE animalDupes plantDupes;
30
BY common;
31
RUN;
32
PROC PRINTDATA=matchmerge; RUN;
4 Codeblock
DATA STEP / PROC SORT Data
Erklärung : Dieses Beispiel zeigt das Zusammenführen von zwei Datasets ('animalMissing' und 'plantMissing2'), die unterschiedliche Werte für ihre gemeinsame BY-Variable 'common' haben, was zu nicht übereinstimmenden Beobachtungen führt. SAS behält die Werte aller Variablen aus beiden Datasets im Endergebnis bei, auch wenn der Wert in einem der Datasets fehlt. Die Datasets werden vor dem Merge nach 'common' sortiert.
Kopiert!
data animalMissing;
input common $ animal1$;
datalines;
a Ant
c Cat
d Dog
e Eagle
;
run;
data plantMissing2;
input common $ plant$;
datalines;
a Apple
b Banana
c Coconut
e Eggplant
f Fig
;
run;
proc sort data=animalMissing; by common; run;
proc sort data=plantMissing2; by common; run;
data matchmerge;
merge animalMissing plantMissing2;
by common;
run;
proc print data=matchmerge; run;
1
DATA animalMissing;
2
INPUT common $ animal1$;
3
DATALINES;
4
a Ant
5
c Cat
6
d Dog
7
e Eagle
8
;
9
RUN;
10
11
DATA plantMissing2;
12
INPUT common $ plant$;
13
DATALINES;
14
a Apple
15
b Banana
16
c Coconut
17
e Eggplant
18
f Fig
19
;
20
RUN;
21
22
PROC SORTDATA=animalMissing; BY common; RUN;
23
PROC SORTDATA=plantMissing2; BY common; RUN;
24
25
DATA matchmerge;
26
MERGE animalMissing plantMissing2;
27
BY common;
28
RUN;
29
30
PROC PRINTDATA=matchmerge; RUN;
5 Codeblock
DATA STEP / PROC SORT Data
Erklärung : Dieses Beispiel ähnelt dem vorherigen, verwendet jedoch die IN=-Dataset-Option, um nicht übereinstimmende Beobachtungen aus dem Ausgabe-Dataset zu entfernen. Die IN=-Variable ist eine boolesche Variable, die den Wert 1 annimmt, wenn das Dataset zur aktuellen Beobachtung beiträgt, und 0, wenn nicht. Die Anweisung IF (i=1) and (j=1) stellt sicher, dass nur Beobachtungen, die in beiden Datasets vorhanden sind (übereinstimmende), in das Ergebnis aufgenommen werden.
Kopiert!
data animalMissing;
input common $ animal$;
datalines;
a Ant
c Cat
d Dog
e Eagle
;
run;
data plantMissing2;
input common $ plant$;
datalines;
a Apple
b Banana
c Coconut
e Eggplant
f Fig
;
run;
proc sort data=animalMissing; by common; run;
proc sort data=plantMissing2; by common; run;
data matchmerge2;
merge animalMissing(in=i) plantMissing2(in=j);
by common;
if (i=1) and (j=1);
run;
proc print data=matchmerge2; run;
1
DATA animalMissing;
2
INPUT common $ animal$;
3
DATALINES;
4
a Ant
5
c Cat
6
d Dog
7
e Eagle
8
;
9
RUN;
10
11
DATA plantMissing2;
12
INPUT common $ plant$;
13
DATALINES;
14
a Apple
15
b Banana
16
c Coconut
17
e Eggplant
18
f Fig
19
;
20
RUN;
21
22
PROC SORTDATA=animalMissing; BY common; RUN;
23
PROC SORTDATA=plantMissing2; BY common; RUN;
24
25
DATA matchmerge2;
26
MERGE animalMissing(in=i) plantMissing2(in=j);
27
BY common;
28
IF (i=1) and (j=1);
29
RUN;
30
PROC PRINTDATA=matchmerge2; RUN;
6 Codeblock
DATA STEP / PROC PRINT Data
Erklärung : Dieses Beispiel zeigt ein Match-Merge, bei dem doppelte Werte der BY-Variablen 'ID' in beiden Datasets ('fruit' und 'color') vorhanden sind. Die Datasets werden zuerst nach 'ID' sortiert. Beim Mergen überschreibt der Wert der Variablen 'color' aus dem Dataset 'color' (als zweites aufgeführt) den Wert im PDV für die erste Beobachtung der BY-Gruppe. Nachfolgende Werte der BY-Gruppe werden dann mit diesem 'color'-Wert gefüllt, bis sich die BY-Gruppe ändert. Dies liegt daran, dass Variablen nicht auf fehlende Werte zurückgesetzt werden, solange sich die BY-Gruppe nicht ändert.
Kopiert!
data fruit;
input ID $ fruit$;
datalines;
a apple
c apricot
d banana
e blueberry
c cantaloupe
c coconut
c cherry
c crabapple
c cranberry
;
run;
data color;
input ID $ color$;
datalines;
a amber
b brown
b blue
b black
b beige
b bronze
c cocoa
c cream
;
run;
proc sort data=fruit; by ID; run;
proc sort data=color; by ID; run;
data merged;
merge fruit color;
by id;
run;
proc print data=merged;
title 'Merged by ID';
run;
1
DATA fruit;
2
INPUT ID $ fruit$;
3
DATALINES;
4
a apple
5
c apricot
6
d banana
7
e blueberry
8
c cantaloupe
9
c coconut
10
c cherry
11
c crabapple
12
c cranberry
13
;
14
RUN;
15
16
DATA color;
17
INPUT ID $ color$;
18
DATALINES;
19
a amber
20
b brown
21
b blue
22
b black
23
b beige
24
b bronze
25
c cocoa
26
c cream
27
;
28
RUN;
29
30
PROC SORTDATA=fruit; BY ID; RUN;
31
PROC SORTDATA=color; BY ID; RUN;
32
33
DATA merged;
34
MERGE fruit color;
35
BY id;
36
RUN;
37
38
PROC PRINTDATA=merged;
39
title 'Merged by ID';
40
RUN;
7 Codeblock
DATA STEP / PROC PRINT Data
Erklärung : Dieses Beispiel zeigt, wie fehlende Werte bei einem Eins-zu-Viele-Merge mit gemeinsamen Variablen gehandhabt werden. Zunächst führt ein einfaches Merge der Datasets 'one' und 'two' (die in 'one' fehlende Werte für 'age' enthalten) zu fehlenden Werten für 'age' im zusammengeführten Dataset. Um dies zu korrigieren, verwendet der zweite Codeblock eine temporäre Variable ('temp_age') und die RETAIN-Anweisung. Beim ersten Datensatz einer BY-Gruppe wird 'temp_age' auf einen fehlenden Wert zurückgesetzt. Wenn 'age' fehlt, wird es durch 'temp_age' ersetzt. Andernfalls wird 'temp_age' mit dem nicht fehlenden Wert von 'age' aktualisiert, wodurch sichergestellt wird, dass der letzte nicht fehlende Wert innerhalb der BY-Gruppe weitergegeben wird.
Kopiert!
data one;
input ID age score;
datalines;
1 8 90
1 . 100
1 . 95
2 9 80
2 . 100
;
run;
data two;
input ID name $ age;
datalines;
1 Sarah 11
2 John 10
;
run;
proc sort data=one; by ID; run;
proc sort data=two; by ID; run;
data merge1;
merge one two;
by id;
run;
proc print data=merge1; title 'Merged by ID'; run;
data merge2 (drop=temp_age);
merge one two;
by id;
retain temp_age;
if first.id then temp_age = .;
if age = . then age = temp_age;
else temp_age = age;
run;
proc print data=merge2; title 'Merged by ID with Age Retained'; run;
1
DATA one;
2
INPUT ID age score;
3
DATALINES;
4
1890
5
1 . 100
6
1 . 95
7
2980
8
2 . 100
9
;
10
RUN;
11
12
DATA two;
13
INPUT ID name $ age;
14
DATALINES;
15
1 Sarah 11
16
2 John 10
17
;
18
RUN;
19
20
PROC SORTDATA=one; BY ID; RUN;
21
PROC SORTDATA=two; BY ID; RUN;
22
23
DATA merge1;
24
MERGE one two;
25
BY id;
26
RUN;
27
PROC PRINTDATA=merge1; title 'Merged by ID'; RUN;
28
29
DATA merge2 (drop=temp_age);
30
MERGE one two;
31
BY id;
32
retain temp_age;
33
IF first.id THEN temp_age = .;
34
IF age = . THEN age = temp_age;
35
ELSE temp_age = age;
36
RUN;
37
PROC PRINTDATA=merge2; title 'Merged by ID with Age Retained'; RUN;
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.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.