Ne confondez jamais la logique séquentielle du DATA MERGE avec l'algèbre relationnelle du SQL : le premier juxtapose les lignes là où le second crée un produit cartésien. Dans une relation "Many-to-Many", l'utilisation du MERGE faussera silencieusement vos résultats en ne générant pas toutes les combinaisons. Si vos clés ne sont uniques dans aucune des deux tables, délaissez l'étape Data au profit d'une jointure explicite via PROC SQL.
Une croyance répandue veut que l'instruction MERGE de l'étape DATA soit l'équivalent exact d'une jointure SQL (LEFT JOIN ou FULL JOIN). Si cela est vrai pour des relations simples (1-pour-1 ou 1-pour-N), c'est totalement faux pour des relations de type "Many-to-Many" (N-pour-N).
Le constat : Des résultats divergents
Prenons un exemple simple où la clé de jointure (ID) apparaît plusieurs fois dans les deux tables :
Table 1 : ID 23456 apparaît 2 fois.
Table 2 : ID 23456 apparaît 2 fois.
Si nous cherchons à combiner ces données, nous nous attendons mathématiquement à obtenir $2 \times 2 = 4$ lignes (le produit cartésien pour cet ID).
Note : L'approche PROC SQL (Produit Cartésien)
Le SQL fonctionne sur une logique d'ensemble (algèbres relationnelle). Il combine chaque ligne de la table A avec chaque ligne correspondante de la table B.
PROC SQL;
SELECT * FROM dataset1 t1
LEFT JOIN dataset2 t2 ON t1.ID = t2.ID;
QUIT;
1
PROC SQL;
2
SELECT * FROM dataset1 t1
3
LEFT JOIN dataset2 t2 ON t1.ID = t2.ID;
4
QUIT;
Résultat : 4 lignes pour l'ID 23456. Toutes les combinaisons possibles sont créées. C'est le comportement standard d'une base de données relationnelle.
Note : L'approche DATA MERGE (Juxtaposition séquentielle)
L'étape DATA fonctionne ligne par ligne de manière séquentielle. Elle place les pointeurs de lecture "côte à côte".
Utilisez PROC SQL si vous avez besoin d'un produit cartésien (relation N-pour-N), c'est-à-dire croiser toutes les occurrences possibles. C'est souvent le résultat attendu pour des analyses croisées.
Utilisez DATA MERGE pour des relations 1-pour-1 ou 1-pour-N (type "Look-up" / Enrichissement de données). C'est beaucoup plus performant en termes de temps de calcul sur de gros volumes, tant que les clés sont uniques dans au moins l'une des deux tables.
Note technique : Il est techniquement possible de simuler un produit cartésien avec une étape DATA (en utilisant deux instructions SET et des boucles explicites), mais le code devient inutilement complexe. Dans ce cas précis, la clarté du SQL est imbattable.
Wichtiger Haftungsausschluss
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
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.