La déclaration MERGE, lorsqu'elle est utilisée sans une instruction BY, effectue une fusion un à un en faisant correspondre implicitement les observations sur la base du numéro de ligne, ignorant les valeurs des variables. Si les jeux de données d'entrée ont des noms de colonnes identiques, les valeurs des variables communes du dernier jeu de données spécifié dans la déclaration MERGE écrasent les valeurs des jeux de données précédemment spécifiés. Les colonnes non partagées sont ajoutées comme nouvelles colonnes. Le jeu de données de sortie contient toutes les observations de tous les jeux de données d'entrée, quel que soit leur nombre d'observations initial. L'option système MERGENOBY peut être utilisée pour contrôler la journalisation des messages lors d'une fusion un à un.
Analyse des données
Type : CREATION_INTERNE
Les exemples utilisent des données générées (datalines) pour assurer l'autonomie du code.
1 Bloc de code
DATA STEP / PROC PRINT Data
Explication : Cet exemple illustre une fusion un à un de deux jeux de données, 'animal' et 'plantG', qui ont un nombre égal d'observations. La déclaration MERGE est utilisée sans instruction BY. Les valeurs de la variable 'common' dans 'plantG' (le dernier jeu de données spécifié) écrasent celles d''animal' à la sixième observation, où elles diffèrent. Les variables non communes sont ajoutées, et toutes les observations sont incluses dans le résultat.
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
DATA plantG;
12
INPUT common $ plant $;
13
DATALINES;
14
a Apple
15
b Banana
16
c Coconut
17
d Dewberry
18
e Eggplant
19
g Fig
20
;
21
DATA merged;
22
MERGE animal plantG;
23
RUN;
24
25
PROC PRINTDATA=merged; RUN;
2 Bloc de code
DATA STEP / PROC PRINT Data
Explication : Ce cas de figure montre une fusion un à un entre 'animal' (6 observations) et 'plantMissing' (3 observations). La déclaration MERGE sans instruction BY traitera tous les enregistrements de chaque jeu de données en les combinant ligne par ligne. Les observations manquantes dans le jeu de données plus court ('plantMissing') entraînent des valeurs manquantes dans les colonnes correspondantes du jeu de données résultant là où il n'y a pas de correspondance implicite, car la fusion continue jusqu'à ce que toutes les observations de tous les jeux de données soient traitées. Si la déclaration 'SET' avait été utilisée, le programme se serait arrêté après avoir lu le dernier enregistrement du plus petit jeu de données.
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; RUN;
3 Bloc de code
DATA STEP / PROC PRINT Data
Explication : Cet exemple illustre les résultats potentiellement indésirables d'une fusion un à un sans instruction BY, lorsque les jeux de données ('animalDupes', 'plantDupes') contiennent des valeurs dupliquées pour la variable 'common'. Les fusions un à un sont conçues pour des données avec une relation un à un. Dans ce scénario (relations un à plusieurs ou plusieurs à un), la fusion se fait ligne par ligne, écrasant les valeurs des variables communes et pouvant entraîner une perte d'informations ou une combinaison incorrecte des observations.
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; RUN;
4 Bloc de code
DATA STEP / PROC PRINT Data
Explication : Cet exemple démontre les résultats indésirables d'une fusion un à un sans instruction BY lorsque les jeux de données ('animalMissing', 'plantMissing2') ont des valeurs différentes pour leur variable commune 'common'. La fusion se fait ligne par ligne, et les valeurs de 'plantMissing2' écrasent celles d''animalMissing' pour la variable 'common'. En l'absence de correspondance explicite des valeurs via une instruction BY, la combinaison des données peut être incorrecte et ne pas refléter les relations attendues entre les observations.
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
DATA plantMissing2;
10
INPUT common $ plant $;
11
DATALINES;
12
a Apple
13
b Banana
14
c Coconut
15
e Eggplant
16
f Fig
17
;
18
DATA merged;
19
MERGE animalMissing plantMissing2;
20
RUN;
21
PROC PRINTDATA=merged; 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 recourez au MERGE sans BY que si vous êtes absolument certain que vos deux tables sont des "miroirs" parfaits (même nombre de lignes, même ordre, aucune variable commune à part celle servant de lien théorique). Dans 99 % des cas, il est préférable d'utiliser une instruction BY pour garantir que la donnée "Ant" reste associée au "a" de manière logique et non accidentelle. »
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.