Publié le :

Exemples : Fusion de données un-à-un

Ce code est également disponible en : English Español
En attente de validation
L'analyse fonctionnelle se concentre sur le comportement de l'instruction MERGE en l'absence de l'instruction BY. Dans ce mode de fusion un-à-un, SAS© ne compare pas les valeurs des variables communes, mais associe implicitement les observations en fonction de leur numéro de ligne. Lorsque des noms de colonnes sont identiques dans les jeux de données d'entrée, les valeurs des variables communes du dernier jeu de données spécifié dans l'instruction MERGE écrasent celles des jeux de données précédents. Les colonnes non partagées sont ajoutées comme de nouvelles colonnes. La lecture des observations se fait séquentiellement à partir de chaque jeu de données, et le jeu de données de sortie contiendra toutes les observations, ajustées par les règles de surcharge des variables communes. Le document met en garde contre l'utilisation de cette méthode pour des relations de données autres que strictement un-à-un, car elle peut produire des résultats imprévus et incorrects.
Analyse des données

Type : CREATION_INTERNE


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é !
1DATA animal;
2 INPUT common $ animal $;
3 DATALINES;
4a Ant
5b Bird
6c Cat
7d Dog
8e Eagle
9f Frog
10;
11 
12DATA plantG;
13 INPUT common $ plant $;
14 DATALINES;
15a Apple
16b Banana
17c Coconut
18d Dewberry
19e Eggplant
20g Fig
21;
22 
23DATA merged;
24 MERGE animal plantG;
25RUN;
26 
27PROC PRINT DATA=merged;
28RUN;
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é !
1DATA animal;
2INPUT common $ animal $;
3DATALINES;
4a Ant
5b Bird
6c Cat
7d Dog
8e Eagle
9f Frog
10;
11 
12DATA plantMissing;
13INPUT common $ plant $;
14DATALINES;
15a Apple
16b Banana
17c Coconut
18;
19 
20DATA merged;
21 MERGE animal plantmissing;
22RUN;
23PROC PRINT DATA=merged;
24RUN;
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é !
1DATA animal;
2INPUT common $ animal $;
3DATALINES;
4a Ant
5b Bird
6c Cat
7d Dog
8e Eagle
9f Frog
10;
11 
12DATA plantMissing;
13INPUT common $ plant $;
14DATALINES;
15a Apple
16b Banana
17c Coconut
18;
19 
20DATA combine;
21 SET animal;
22 SET plantMissing;
23RUN;
24PROC PRINT DATA=combine;
25RUN;
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é !
1DATA animalDupes;
2INPUT common $ animal $;
3DATALINES;
4a Ant
5a Ape
6b Bird
7c Cat
8d Dog
9e Eagle
10;
11 
12DATA plantDupes;
13INPUT common $ plant $;
14DATALINES;
15a Apple
16b Banana
17c Coconut
18c Celery
19d Dewberry
20e Eggplant
21;
22 
23DATA merged;
24 MERGE animalDupes plantDupes;
25RUN;
26PROC PRINT DATA=merged;
27RUN;
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é !
1DATA animalMissing;
2INPUT common $ animal $;
3DATALINES;
4a Ant
5c Cat
6d Dog
7e Eagle
8;
9 
10DATA plantMissing2;
11INPUT common $ plant $;
12DATALINES;
13a Apple
14b Banana
15c Coconut
16e Eggplant
17f Fig
18;
19 
20DATA merged;
21 MERGE animalMissing plantMissing2;
22RUN;
23PROC PRINT DATA=merged;
24RUN;
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.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved


Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« 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 »