Publié le :

Exemple : Fusionner des données à l'aide d'une table de hachage

Ce code est également disponible en : English Español
En attente de validation
Une table de hachage SAS© contient des lignes (entrées de hachage) et des colonnes (variables de hachage). Chaque entrée de hachage doit avoir au moins une colonne clé et une colonne de données. Les valeurs peuvent être codées en dur ou chargées à partir d'un jeu de données SAS©. Une table de hachage réside entièrement en mémoire, ce qui rend ses opérations rapides. Les données n'ont pas besoin d'être préalablement triées. Une table de hachage est temporaire : une fois l'exécution de l'étape DATA arrêtée, elle cesse d'exister. Cependant, son contenu peut être sauvegardé dans un jeu de données SAS© ou une base de données externe. L'objet de hachage est dimensionné dynamiquement. L'exemple utilise la méthode DECLARE pour créer la table de hachage, DEFINEKEY pour identifier la variable clé unique (Supplier_ID) et DEFINEDATA pour charger des variables supplémentaires (Supplier_Name, Supplier_Address, Country). La méthode FIND est utilisée pour rechercher des correspondances entre le jeu de données de base (product_list) et la table de hachage.
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 :
Le code SAS crée d'abord deux jeux de données temporaires, 'product_list' et 'supplier', en utilisant des blocs DATALINES pour rendre l'exemple autonome. Ensuite, il utilise une étape DATA pour créer un nouveau jeu de données 'supplier_info'. Dans cette étape DATA, un objet hash 'S' est déclaré et initialisé avec les données du jeu de données 'work.supplier'. 'Supplier_ID' est défini comme la clé de hachage, et 'Supplier_Name', 'Supplier_Address', 'Country' sont définis comme les données à stocker dans la table de hachage. La fonction 'call missing' est utilisée pour initialiser ces variables et éviter des avertissements. Ensuite, le programme itère sur le jeu de données 'work.product_list'. Pour chaque observation de 'product_list', la méthode 'S.find()' est appelée pour rechercher une correspondance de 'Supplier_ID' dans la table de hachage. Si une correspondance est trouvée (rc=0), l'observation est écrite dans le jeu de données 'supplier_info', combinant les informations des deux sources. Enfin, une PROC PRINT est utilisée pour afficher le contenu du jeu de données 'supplier_info', présentant les produits avec les informations complètes de leurs fournisseurs.
Copié !
1/* Création du jeu de données product_list */
2DATA work.product_list;
3 INFILE DATALINES dlm=',';
4 LENGTH Product_Id $12 Product_Name $50 Supplier_ID 8;
5 INPUT Product_Id $ Product_Name $ Supplier_ID;
6 DATALINES;
7240200100101,Grandslam Staff Tour Mhl Golf Gloves,3808
8210200100017,Sweatshirt Children's O-Neck,3298
9240400200022,Aftm 95 Vf Long Bg-65 White,1280
10230100100017,Men's Jacket Rem,50
11210200300006,Fleece Cuff Pant Kid'S,1303
12210200500002,Children's Mitten,772
13210200700016,Strap Pants BBO,798
14210201000050,Kid Children's T-Shirt,2963
15210200100009,Kids Sweat Round Neck,Large Logo,3298
16210201000067,Logo Coord.Children's Sweatshirt,2963
17220100100019,Fit Racing Cap,1303
18220100100025,Knit Hat,1303
19220100300001,Fleece Jacket Compass,772
20220200200036,Soft Astro Men's Running Shoes,1747
21230100100015,Men's Jacket Caians,50
22230100500004,Backpack Flag, 6,5x9 Cm.,316
23210200500006,Rain Suit, Plain w/backpack Jacket,772
24230100500006,Collapsible Water Can,316
25224040020000,Bat 5-Ply,3808
26220200200035,Soft Alta Plus Women's Indoor Shoes,1747
27240400200066,Memhis 350,Yellow Medium, 6-pack,1280
28240200100081,Extreme Distance 90 3-pack,3808
29;
30run;
31 
32/* Création du jeu de données supplier */
33data work.supplier;
34 infile datalines dlm=',';
35 length Supplier_ID 8 Supplier_Name $40 Supplier_Address $45 Country $2;
36 input Supplier_ID Supplier_Name $ Supplier_Address $ Country $;
37 datalines;
3850,Scandinavian Clothing A/S,Kr. Augusts Gate 13,NO
39316,Prime Sports Ltd,9 Carlisle Place,GB
40755,Top Sports,Jernbanegade 45,DK
41772,AllSeasons Outdoor Clothing,553 Cliffview Dr,US
42798,Sportico,C. Barquillo 1,ES
431280,British Sports Ltd,85 Station Street,GB
441303,Eclipse Inc,1218 Carriole Ct,US
451684,Magnifico Sports,Rua Costa Pinto 2,PT
461747,Pro Sportswear Inc,2434 Edgebrook Dr,US
473298,A Team Sports,2687 Julie Ann Ct,US
483808,Carolina Sports,3860 Grand Ave,US
49;
50run;
51 
52data supplier_info;
53 drop rc;
54 length Supplier_Name $40 Supplier_Address $ 45 Country $ 2;
55 if _N_=1 then do;
56 declare hash S(dataset:'work.supplier');
57 S.definekey('Supplier_ID');
58 S.definedata('Supplier_Name',
59 'Supplier_Address','Country');
60 S.definedone();
61 call missing(Supplier_Name,
62 Supplier_Address,Country);
63 end;
64 set work.product_list;
65 rc=S.find();
66run;
67 
68proc print data=supplier_info;
69 var Product_ID Supplier_ID Supplier_Name
70 Supplier_Address Country;
71 title "Product Information";
72RUN;
73title;
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.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Utilisez l'objet Hash lorsque vous devez joindre une table géante à une table de référence de taille petite ou moyenne (jusqu'à quelques gigaoctets selon votre RAM). C'est la solution idéale pour enrichir des flux de données transactionnels avec des référentiels (noms de clients, libellés produits) sans alourdir vos chaînes de traitement par des étapes de tri systématiques. »