Publicado el :
Manipulación de datos CREATION_INTERNE

Ejemplos: Fusión por correspondencia de datos

Este código también está disponible en: Deutsch English Français
En espera de validación
La fusión por correspondencia es una técnica poderosa para combinar conjuntos de datos SAS©. Permite unir observaciones de dos o más conjuntos de datos en función de los valores de una o más variables comunes (variables BY). Los conjuntos de datos de entrada deben estar ordenados o indexados por las variables BY antes de la fusión. Este proceso puede compararse con una unión interna (INNER JOIN) en SQL cuando todos los valores de las variables BY coinciden y no hay duplicados. SAS© conserva los valores de todas las variables en el vector de datos del programa, incluso si el valor falta o no está emparejado. Cuando se lee una observación final de un grupo BY en un conjunto de datos, SAS© retiene sus valores para todas las variables únicas a ese conjunto de datos hasta que se hayan leído todas las observaciones de ese grupo BY en todos los conjuntos de datos. El número total de observaciones en el conjunto de datos final es la suma del número máximo de observaciones en un grupo BY de cualquiera de los conjuntos de datos.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines) o SASHELP.

1 Bloque de código
DATA STEP / PROC SORT Data
Explicación :
Este ejemplo ilustra una fusión por correspondencia simple donde la instrucción MERGE se usa con la instrucción BY para unir dos conjuntos de datos ('animal' y 'plant') basados en la variable común 'common'. Es una fusión uno a uno porque no hay valores duplicados para la variable BY en ninguno de los conjuntos de datos de entrada. Los conjuntos de datos se ordenan primero por 'common' antes de la fusión.
¡Copiado!
1DATA animal;
2 INPUT common $ animal$;
3 DATALINES;
4a Ant
5b Bird
6c Cat
7d Dog
8e Eagle
9f Frog
10;
11RUN;
12 
13DATA plant;
14 INPUT common $ plant$;
15 DATALINES;
16a Apple
17b Banana
18c Coconut
19d Dewberry
20e Eggplant
21f Fig
22;
23RUN;
24 
25PROC SORT DATA=animal; BY common; RUN;
26PROC SORT DATA=plant; BY common; RUN;
27 
28DATA matchmerge;
29 MERGE animal plant;
30 BY common;
31RUN;
32PROC PRINT DATA=matchmerge; RUN;
2 Bloque de código
DATA STEP / PROC PRINT Data
¡Copiado!
1DATA one;
2 INPUT ID state$;
3 DATALINES;
41 AZ
52 MA
63 WA
74 WI
8;
9RUN;
10 
11DATA many;
12 INPUT ID city $ state$;
13 DATALINES;
141 Phoenix Ariz
152 Boston Mass
162 Foxboro Mass
173 Olympia Mass
183 Seattle Wash
193 Spokane Wash
204 Madison Wis
214 Milwaukee Wis
224 Madison Wis
234 Hurley Wis
24;
25RUN;
26 
27PROC SORT DATA=one; BY ID; RUN;
28PROC SORT DATA=many; BY ID; RUN;
29 
30DATA three;
31 MERGE many one;
32 BY ID;
33RUN;
34PROC PRINT DATA=three noobs; RUN;
35title;
36 
37DATA solution;
38 MERGE many(drop=state) one;
39 BY ID;
40RUN;
41PROC PRINT DATA=solution noobs; RUN;
3 Bloque de código
DATA STEP / PROC SORT Data
¡Copiado!
1DATA animalDupes;
2 INPUT common $ animal1$;
3 DATALINES;
4a Ant
5a Ape
6b Bird
7c Cat
8d Dog
9e Eagle
10;
11RUN;
12 
13DATA plantDupes;
14 INPUT common $ plant1$;
15 DATALINES;
16a Apple
17b Banana
18c Coconut
19c Celery
20d Dewberry
21e Eggplant
22;
23RUN;
24 
25PROC SORT DATA=animalDupes; BY common; RUN;
26PROC SORT DATA=plantDupes; BY common; RUN;
27 
28DATA matchmerge;
29 MERGE animalDupes plantDupes;
30 BY common;
31RUN;
32PROC PRINT DATA=matchmerge; RUN;
4 Bloque de código
DATA STEP / PROC SORT Data
¡Copiado!
1DATA animalMissing;
2 INPUT common $ animal1$;
3 DATALINES;
4a Ant
5c Cat
6d Dog
7e Eagle
8;
9RUN;
10 
11DATA plantMissing2;
12 INPUT common $ plant$;
13 DATALINES;
14a Apple
15b Banana
16c Coconut
17e Eggplant
18f Fig
19;
20RUN;
21 
22PROC SORT DATA=animalMissing; BY common; RUN;
23PROC SORT DATA=plantMissing2; BY common; RUN;
24 
25DATA matchmerge;
26 MERGE animalMissing plantMissing2;
27 BY common;
28RUN;
29 
30PROC PRINT DATA=matchmerge; RUN;
5 Bloque de código
DATA STEP / PROC SORT Data
¡Copiado!
1DATA animalMissing;
2 INPUT common $ animal$;
3 DATALINES;
4a Ant
5c Cat
6d Dog
7e Eagle
8;
9RUN;
10 
11DATA plantMissing2;
12 INPUT common $ plant$;
13 DATALINES;
14a Apple
15b Banana
16c Coconut
17e Eggplant
18f Fig
19;
20RUN;
21 
22PROC SORT DATA=animalMissing; BY common; RUN;
23PROC SORT DATA=plantMissing2; BY common; RUN;
24 
25DATA matchmerge2;
26 MERGE animalMissing(in=i) plantMissing2(in=j);
27 BY common;
28 IF (i=1) and (j=1);
29RUN;
30PROC PRINT DATA=matchmerge2; RUN;
6 Bloque de código
DATA STEP / PROC PRINT Data
¡Copiado!
1DATA fruit;
2 INPUT ID $ fruit$;
3 DATALINES;
4a apple
5c apricot
6d banana
7e blueberry
8c cantaloupe
9c coconut
10c cherry
11c crabapple
12c cranberry
13;
14RUN;
15 
16DATA color;
17 INPUT ID $ color$;
18 DATALINES;
19a amber
20b brown
21b blue
22b black
23b beige
24b bronze
25c cocoa
26c cream
27;
28RUN;
29 
30PROC SORT DATA=fruit; BY ID; RUN;
31PROC SORT DATA=color; BY ID; RUN;
32 
33DATA merged;
34 MERGE fruit color;
35 BY id;
36RUN;
37 
38PROC PRINT DATA=merged;
39 title 'Merged by ID';
40RUN;
7 Bloque de código
DATA STEP / PROC PRINT Data
¡Copiado!
1DATA one;
2 INPUT ID age score;
3 DATALINES;
41 8 90
51 . 100
61 . 95
72 9 80
82 . 100
9;
10RUN;
11 
12DATA two;
13 INPUT ID name $ age;
14 DATALINES;
151 Sarah 11
162 John 10
17;
18RUN;
19 
20PROC SORT DATA=one; BY ID; RUN;
21PROC SORT DATA=two; BY ID; RUN;
22 
23DATA merge1;
24 MERGE one two;
25 BY id;
26RUN;
27PROC PRINT DATA=merge1; title 'Merged by ID'; RUN;
28 
29DATA 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;
36RUN;
37PROC PRINT DATA=merge2; title 'Merged by ID with Age Retained'; RUN;
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