Publié le :
ETL MIXTE

Gestion des données de localisation et macros utilitaires SAS

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
L'ensemble du code se compose d'un script principal qui utilise un DATA Step avec `datalines4` pour créer des données de localisation dans `work.Location`, puis les ajoute à un jeu de données permanent `productn.Location` via `PROC APPEND`. Il contient également la définition de deux macros SAS© : `%macro_without_brief_tag`, une simple macro de test qui affiche son argument, et `%mm_getdetails`, une macro plus complexe pour interroger le serveur de métadonnées SAS© afin d'extraire les attributs et associations d'un URI d'objet de métadonnées donné.
Analyse des données

Type : MIXTE


Le script principal crée des données en interne via `datalines4`. La macro `%mm_getdetails` interagit avec le serveur de métadonnées SAS pour récupérer des informations système (métadonnées). La macro `%macro_without_brief_tag` opère sur des arguments passés en interne et ne traite pas de données externes.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc DATA Step crée le jeu de données `work.Location`. Il définit les attributs des variables (longueur, format, label) et lit les données fournies dans la section `datalines4`. Les `datalines4` permettent d'intégrer des données directement dans le script, formatées en CSV avec un délimiteur virgule. Le format `DATETIME22.3` indique que la date est stockée en tant que valeur numérique SAS, représentant la date et l'heure avec une précision de millisecondes.
Copié !
1DATA work.Location ;
2attrib
3LocationID LENGTH= 8 FORMAT=6. label="LocationID"
4Name LENGTH= $100 FORMAT=$100. label="Name"
5CostRate LENGTH= 8 FORMAT=12.4 label="CostRate"
6Availability LENGTH= 8 FORMAT=10.2 label="Availability"
7ModifiedDate LENGTH= 8 FORMAT=DATETIME22.3 label="ModifiedDate"
8;
9INFILE CARDS dsd delimiter=',';
10INPUT
11 LocationID
12 Name :$char.
13 CostRate
14 Availability
15 ModifiedDate
16;
17datalines4;
181,Tool Crib,0,0,1525132800
192,Sheet Metal Racks,0,0,1525132800
203,Paint Shop,0,0,1525132800
214,Paint Storage,0,0,1525132800
225,Metal Storage,0,0,1525132800
236,Miscellaneous Storage,0,0,1525132800
247,Finished Goods Storage,0,0,1525132800
2510,Frame Forming,22.5,96,1525132800
2620,Frame Welding,25,108,1525132800
2730,Debur and Polish,14.5,120,1525132800
2840,Paint,15.75,120,1525132800
2945,Specialized Paint,18,80,1525132800
3050,Subassembly,12.25,120,1525132800
3160,Final Assembly,12.25,120,1525132800
32;;;;
33RUN;
2 Bloc de code
PROC APPEND
Explication :
`PROC APPEND` est utilisée pour ajouter toutes les observations du jeu de données `work.Location` (créé précédemment) à la fin du jeu de données `productn.Location`. Cette procédure est efficace pour ajouter de nouvelles lignes à une table existante sans avoir à la recréer entièrement. La table `productn.Location` est supposée exister ou être créée par un autre processus.
Copié !
1 
2PROC APPEND base=productn.Location
3DATA=work.Location;
4RUN;
5 
3 Bloc de code
MACRO macro_without_brief_tag
Explication :
Ce bloc définit la macro SAS `%macro_without_brief_tag`. Elle prend un argument `i_desc` et l'affiche directement dans le log SAS via `%PUT`. Cette macro simple est principalement destinée à des fins de test, de débogage ou pour afficher la valeur d'une macro-variable.
Copié !
1%MACRO macro_without_brief_tag (i_desc);
2%put &i_desc.;
3%MEND macro_without_brief_tag;
4 
4 Bloc de code
MACRO mm_getdetails Data
Explication :
Cette macro, `%mm_getdetails`, est conçue pour extraire des informations détaillées (attributs et associations) d'un URI d'objet de métadonnées SAS. Elle prend un URI en entrée et deux jeux de données de sortie facultatifs (`outattrs` et `outassocs`). Le premier bloc DATA Step parcourt les associations de l'URI spécifié en utilisant les fonctions `metadata_getnasl` et `metadata_getnasn`, puis extrait les noms via `metadata_getattr`, stockant ces informations dans `&outassocs`. Le second bloc DATA Step extrait les propriétés et attributs de l'URI en utilisant `metadata_getnprp` et `metadata_getnatr`, stockant les détails dans `&outattrs`. Chaque jeu de données est ensuite trié par `PROC SORT` selon les options fournies.
Copié !
1%macro mm_getdetails(uri
2 ,outattrs=work.attributes
3 ,outassocs=work.associations
4 ,sortoptions=
5)/*/STORE SOURCE*/;
6 
7DATA &outassocs;
8 keep assoc assocuri name;
9 LENGTH assoc assocuri name $256;
10 call missing(of _all_);
11 rc1=1;n1=1;
12 DO while(rc1>0);
13 /* Walk through all possible associations of this object. */
14 rc1=metadata_getnasl("&uri",n1,assoc);
15 rc2=1;n2=1;
16 DO while(rc2>0);
17 /* Walk through all the associations on this machine object. */
18 rc2=metadata_getnasn("&uri",trim(assoc),n2,assocuri);
19 IF (rc2>0) THEN DO;
20 rc3=metadata_getattr(assocuri,"Name",name);
21 OUTPUT;
22 END;
23 call missing(name,assocuri);
24 n2+1;
25 END;
26 n1+1;
27 END;
28RUN;
29PROC SORT &sortoptions;
30 BY assoc name;
31RUN;
32 
33DATA &outattrs;
34 keep type name value;
35 LENGTH type $4 name $256 value $32767;
36 rc1=1;n1=1;type='Prop';name='';value='';
37 DO while(rc1>0);
38 rc1=metadata_getnprp("&uri",n1,name,value);
39 IF rc1>0 THEN OUTPUT;
40 n1+1;
41 END;
42 rc1=1;n1=1;type='Attr';
43 DO while(rc1>0);
44 rc1=metadata_getnatr("&uri",n1,name,value);
45 IF rc1>0 THEN OUTPUT;
46 n1+1;
47 END;
48RUN;
49PROC SORT &sortoptions;
50 BY type name;
51RUN;
52 
53%mend mm_getdetails;
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 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de. Ce fichier fait partie de SASUnit, le framework de test unitaire pour les programmes SAS(R). Pour les informations de copyright et les termes d'utilisation sous la GNU Lesser General Public License, voir le fichier README.md inclus ou https://github.com/HMS-Analytical-Software/SASUnit/wiki/readme/.