Publicado el :
Manipulación de datos CREATION_INTERNE

Ejemplo: Fusionar datos usando una tabla hash

Este código también está disponible en: English Français
En espera de validación
Una tabla hash SAS© contiene filas (entradas hash) y columnas (variables hash). Cada entrada hash debe tener al menos una columna clave y una columna de datos. Los valores pueden ser codificados o cargados desde un conjunto de datos SAS©. Una tabla hash reside completamente en memoria, lo que hace que sus operaciones sean rápidas. Los datos no necesitan ser previamente ordenados. Una tabla hash es temporal: una vez que la ejecución del paso DATA se detiene, deja de existir. Sin embargo, su contenido puede ser guardado en un conjunto de datos SAS© o en una base de datos externa. El objeto hash se dimensiona dinámicamente. El ejemplo utiliza el método DECLARE para crear la tabla hash, DEFINEKEY para identificar la variable clave única (Supplier_ID) y DEFINEDATA para cargar variables adicionales (Supplier_Name, Supplier_Address, Country). El método FIND se utiliza para buscar coincidencias entre el conjunto de datos base (product_list) y la tabla hash.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines) o SASHELP.

1 Bloque de código
DATA STEP Data
Explicación :
El código SAS crea primero dos conjuntos de datos temporales, 'product_list' y 'supplier', utilizando bloques DATALINES para hacer el ejemplo autónomo. Luego, utiliza un paso DATA para crear un nuevo conjunto de datos 'supplier_info'. En este paso DATA, se declara e inicializa un objeto hash 'S' con los datos del conjunto de datos 'work.supplier'. 'Supplier_ID' se define como la clave hash, y 'Supplier_Name', 'Supplier_Address', 'Country' se definen como los datos a almacenar en la tabla hash. La función 'call missing' se utiliza para inicializar estas variables y evitar advertencias. A continuación, el programa itera sobre el conjunto de datos 'work.product_list'. Para cada observación de 'product_list', se llama al método 'S.find()' para buscar una coincidencia de 'Supplier_ID' en la tabla hash. Si se encuentra una coincidencia (rc=0), la observación se escribe en el conjunto de datos 'supplier_info', combinando la información de ambas fuentes. Finalmente, se utiliza una PROC PRINT para mostrar el contenido del conjunto de datos 'supplier_info', presentando los productos con la información completa de sus proveedores.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.