Les exemples utilisent des données générées (datalines) ou SASHELP.
1 Bloc de code
DATA STEP Data
Explication : Cet exemple fusionne deux jeux de données, 'animal' et 'plantG', qui ont un nombre égal d'observations et une variable commune nommée 'common'. L'instruction MERGE est utilisée sans l'instruction BY, ce qui signifie que les observations sont fusionnées sur la base de leur position (numéro de ligne). La valeur 'g' de la variable 'common' dans 'plantG' remplace la valeur 'f' de 'common' dans 'animal' pour l'observation 6 du jeu de données de sortie, démontrant que les valeurs du dernier jeu de données nommé écrasent les précédentes pour les variables communes.
Copié !
data animal;
input common $ animal $;
datalines;
a Ant
b Bird
c Cat
d Dog
e Eagle
f Frog
;
data plantG;
input common $ plant $;
datalines;
a Apple
b Banana
c Coconut
d Dewberry
e Eggplant
g Fig
;
data merged;
merge animal plantG;
run;
proc print data=merged;
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
12
DATA plantG;
13
INPUT common $ plant $;
14
DATALINES;
15
a Apple
16
b Banana
17
c Coconut
18
d Dewberry
19
e Eggplant
20
g Fig
21
;
22
23
DATA merged;
24
MERGE animal plantG;
25
RUN;
26
27
PROC PRINTDATA=merged;
28
RUN;
2 Bloc de code
DATA STEP Data
Explication : Cet exemple fusionne les jeux de données 'animal' (6 observations) et 'plantMissing' (3 observations). Sans instruction BY, la fusion un-à-un associe les observations par numéro de ligne. Le jeu de données 'merged' résultant aura 6 observations. Pour les observations 4, 5 et 6, les variables de 'plantMissing' (plant, common) contiendront des valeurs manquantes car 'plantMissing' n'a que 3 observations. Les valeurs de 'common' du dernier jeu de données ('plantMissing') écrasent celles d''animal' pour les observations correspondantes.
Copié !
data animal;
input common $ animal $;
datalines;
a Ant
b Bird
c Cat
d Dog
e Eagle
f Frog
;
data plantMissing;
input common $ plant $;
datalines;
a Apple
b Banana
c Coconut
;
data merged;
merge animal plantmissing;
run;
proc print data=merged;
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
12
DATA plantMissing;
13
INPUT common $ plant $;
14
DATALINES;
15
a Apple
16
b Banana
17
c Coconut
18
;
19
20
DATA merged;
21
MERGE animal plantmissing;
22
RUN;
23
PROC PRINTDATA=merged;
24
RUN;
3 Bloc de code
DATA STEP Data
Explication : Cet exemple montre la différence de comportement entre MERGE et SET lors de la combinaison de jeux de données de tailles inégales sans instruction BY. Avec deux instructions SET consécutives, la DATA step arrête de sélectionner des observations pour la sortie après avoir lu la dernière observation du jeu de données ayant le plus petit nombre d'observations ('plantMissing' avec 3 observations). Le jeu de données résultant 'combine' n'aura donc que 3 observations, où les variables de 'animal' seront présentes mais non combinées par ligne avec 'plantMissing' au-delà de la 3ème observation.
Copié !
data animal;
input common $ animal $;
datalines;
a Ant
b Bird
c Cat
d Dog
e Eagle
f Frog
;
data plantMissing;
input common $ plant $;
datalines;
a Apple
b Banana
c Coconut
;
data combine;
set animal;
set plantMissing;
run;
proc print data=combine;
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
12
DATA plantMissing;
13
INPUT common $ plant $;
14
DATALINES;
15
a Apple
16
b Banana
17
c Coconut
18
;
19
20
DATA combine;
21
SET animal;
22
SET plantMissing;
23
RUN;
24
PROC PRINTDATA=combine;
25
RUN;
4 Bloc de code
DATA STEP Data
Explication : Cet exemple illustre les résultats indésirables d'une fusion un-à-un (sans BY) lorsque les jeux de données contiennent des valeurs dupliquées pour les variables communes. Étant donné que la fusion est basée sur le numéro de ligne et non sur les valeurs de 'common', les doublons de 'a' dans 'animalDupes' et de 'c' dans 'plantDupes' ne sont pas gérés comme on pourrait s'y attendre. La deuxième observation de 'animalDupes' (a Ape) est fusionnée avec la deuxième de 'plantDupes' (b Banana), ce qui ne correspond pas aux valeurs de la variable commune. Le résultat est un jeu de données où l'appariement logique des observations est compromis en raison des duplications et de l'absence de l'instruction BY.
Copié !
data animalDupes;
input common $ animal $;
datalines;
a Ant
a Ape
b Bird
c Cat
d Dog
e Eagle
;
data plantDupes;
input common $ plant $;
datalines;
a Apple
b Banana
c Coconut
c Celery
d Dewberry
e Eggplant
;
data merged;
merge animalDupes plantDupes;
run;
proc print data=merged;
run;
1
DATA animalDupes;
2
INPUT common $ animal $;
3
DATALINES;
4
a Ant
5
a Ape
6
b Bird
7
c Cat
8
d Dog
9
e Eagle
10
;
11
12
DATA plantDupes;
13
INPUT common $ plant $;
14
DATALINES;
15
a Apple
16
b Banana
17
c Coconut
18
c Celery
19
d Dewberry
20
e Eggplant
21
;
22
23
DATA merged;
24
MERGE animalDupes plantDupes;
25
RUN;
26
PROC PRINTDATA=merged;
27
RUN;
5 Bloc de code
DATA STEP Data
Explication : Cet exemple démontre les résultats indésirables d'une fusion un-à-un (sans BY) lorsque les jeux de données d'entrée ('animalMissing' et 'plantMissing2') ont des valeurs différentes pour la variable commune ('common'). Étant donné que la fusion se fait par numéro de ligne, l'observation 2 d''animalMissing' (c Cat) est fusionnée avec l'observation 2 de 'plantMissing2' (b Banana), et ainsi de suite. Cela conduit à un jeu de données où les valeurs de la variable 'common' et des autres variables ne correspondent pas logiquement, car l'appariement n'est pas basé sur la concordance des identifiants.
Copié !
data animalMissing;
input common $ animal $;
datalines;
a Ant
c Cat
d Dog
e Eagle
;
data plantMissing2;
input common $ plant $;
datalines;
a Apple
b Banana
c Coconut
e Eggplant
f Fig
;
data merged;
merge animalMissing plantMissing2;
run;
proc print data=merged;
run;
1
DATA animalMissing;
2
INPUT common $ animal $;
3
DATALINES;
4
a Ant
5
c Cat
6
d Dog
7
e Eagle
8
;
9
10
DATA plantMissing2;
11
INPUT common $ plant $;
12
DATALINES;
13
a Apple
14
b Banana
15
c Coconut
16
e Eggplant
17
f Fig
18
;
19
20
DATA merged;
21
MERGE animalMissing plantMissing2;
22
RUN;
23
PROC PRINTDATA=merged;
24
RUN;
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.
« Ne faites jamais de MERGE sans BY sur des données de production. Si vous devez absolument combiner deux tables par leur position, assurez-vous qu'elles ont exactement le même nombre de lignes et utilisez l'option RENAME= pour éviter les écrasements accidentels de variables. Dans 99% des cas, un MERGE avec une instruction BY sur une clé unique est la seule méthode sécurisée »
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.