Publié le :

Fusionner des données avec une table de hachage

Ce code est également disponible en : Deutsch 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 ensemble 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é-triées. Une table de hachage est temporaire : une fois l'étape DATA terminée, elle cesse d'exister. Cependant, son contenu peut être enregistré dans un ensemble de données SAS© ou une base de données externe. L'objet de hachage est dimensionné dynamiquement.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (DATA step avec DATALINES) pour simuler les tables `product_list` et `supplier`.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc de code DATA step crée l'ensemble de données `work.product_list` en utilisant des données en ligne (DATALINES). Il définit les variables `Product_Id`, `Product_Name` et `Supplier_ID` avec leurs types et longueurs respectifs. Les espaces et caractères spéciaux dans `Product_Name` ont été remplacés par des underscores pour une meilleure gestion via DATALINES.
Copié !
1DATA work.product_list;
2 LENGTH Product_Id $10 Product_Name $40 Supplier_ID 8;
3 INPUT Product_Id $ Product_Name :$40. Supplier_ID;
4 DATALINES;
5240200100101 Grandslam_Staff_Tour_Mhl_Golf_Gloves 3808
6210200100017 Sweatshirt_Children's_O-Neck 3298
7240400200022 Aftm_95_Vf_Long_Bg-65_White 1280
8230100100017 Men's_Jacket_Rem 50
9210200300006 Fleece_Cuff_Pant_Kid'S 1303
10210200500002 Children's_Mitten 772
11210200700016 Strap_Pants_BBO 798
12210201000050 Kid_Children's_T-Shirt 2963
13210200100009 Kids_Sweat_Round_Neck,Large_Logo 3298
14210201000067 Logo_Coord.Children's_Sweatshirt 2963
15220100100019 Fit_Racing_Cap 1303
16220100100025 Knit_Hat 1303
17220100300001 Fleece_Jacket_Compass 772
18220200200036 Soft_Astro_Men's_Running_Shoes 1747
19230100100015 Men's_Jacket_Caians 50
20230100500004 Backpack_Flag,_6,5x9_Cm. 316
21210200500006 Rain_Suit,_Plain_w/backpack_Jacket 772
22230100500006 Collapsible_Water_Can 316
23224040020000 Bat_5-Ply 3808
24220200200035 Soft_Alta_Plus_Women's_Indoor_Shoes 1747
25240400200066 Memhis_350,Yellow_Medium,_6-pack 1280
26240200100081 Extreme_Distance_90_3-pack 3808
27;
28RUN;
2 Bloc de code
DATA STEP Data
Explication :
Ce bloc de code DATA step crée l'ensemble de données `work.supplier` en utilisant des données en ligne (DATALINES). Il définit les variables `Supplier_ID`, `Supplier_Name`, `Supplier_Address` et `Country` avec leurs types et longueurs respectifs. Les espaces et caractères spéciaux ont été remplacés par des underscores pour une meilleure gestion via DATALINES.
Copié !
1DATA work.supplier;
2 LENGTH Supplier_ID 8 Supplier_Name $40 Supplier_Address $45 Country $2;
3 INPUT Supplier_ID Supplier_Name :$40. Supplier_Address :$45. Country $;
4 DATALINES;
550 Scandinavian_Clothing_A/S Kr._Augusts_Gate_13 NO
6316 Prime_Sports_Ltd 9_Carlisle_Place GB
7755 Top_Sports Jernbanegade_45 DK
8772 AllSeasons_Outdoor_Clothing 553_Cliffview_Dr US
9798 Sportico C._Barquillo_1 ES
101280 British_Sports_Ltd 85_Station_Street GB
111303 Eclipse_Inc 1218_Carriole_Ct US
121684 Magnifico_Sports Rua_Costa_Pinto_2 PT
131747 Pro_Sportswear_Inc 2434_Edgebrook_Dr US
143298 A_Team_Sports 2687_Julie_Ann_Ct US
153808 Carolina_Sports 3860_Grand_Ave US
16;
17RUN;
3 Bloc de code
DATA STEP / PROC PRINT
Explication :
1. Inclut une instruction LENGTH pour s'assurer que les variables `Supplier_Name`, `Supplier_Address` et `Country` sont définies dans le PDV (Program Data Vector).
2. Lors de la première itération de l'étape DATA, déclare l'objet de hachage `S`. Attribue `Supplier_ID` comme clé de l'objet de hachage. Inclut les valeurs de `Supplier_Name`, `Supplier_Address` et `Country` de l'ensemble de données `work.supplier`.
3. Étant donné que `Supplier_Name`, `Supplier_Address` et `Country` ne sont pas explicitement affectées de valeurs initiales, SAS écrit une NOTE dans le journal indiquant que les variables ne sont pas initialisées. `CALL MISSING` supprime cette NOTE.
4. Lit une observation de l'ensemble de données `product_list`.
5. La méthode `FIND` est appelée pour vérifier si le `Supplier_ID` de `product_list` correspond à la clé `Supplier_ID` de l'une des entrées de l'objet de hachage. S'il y a une correspondance (`rc=0`), l'observation est écrite dans l'ensemble de données `supplier_info`.
Le PROC PRINT affiche ensuite le contenu de l'ensemble de données `supplier_info`.
Copié !
1DATA supplier_info;
2 drop rc;
3 LENGTH Supplier_Name $40 Supplier_Address $ 45 Country $ 2; /* 1*/
4 IF _N_=1 THEN DO;
5 declare hash S(dataset:'work.supplier'); /* 2*/
6 S.definekey('Supplier_ID');
7 S.definedata('Supplier_Name',
8 'Supplier_Address','Country');
9 S.definedone();
10 call missing(Supplier_Name,
11 Supplier_Address,Country); /* 3*/
12 END;
13 SET work.product_list; /* 4*/
14 rc=S.find(); /* 5*/
15RUN;
16PROC PRINT DATA=supplier_info;
17 var Product_ID Supplier_ID Supplier_Name
18 Supplier_Address Country;
19 title "Product Information";
20RUN;
21title;
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.
« Réservez l'objet de hachage pour votre table la plus petite (la table de référence) afin qu'elle puisse tenir entièrement en mémoire vive. Si votre table de référence dépasse la RAM disponible, le système basculera sur le fichier d'échange (swap), et vous perdrez tout le bénéfice de performance. Dans ce cas, revenez à une PROC SORT suivie d'un MERGE »