Publié le :
Macro CREATION_INTERNE

Générateur de jeu de données de contrôle pour formats

En attente de validation
Cette macro `%mp_cntlout` est conçue pour extraire des informations de formats SAS© et les organiser dans un jeu de données de contrôle (`cntlout`). Elle utilise la macro `%mddl_sas©_cntlout` (probablement pour initialiser un modèle de données de sortie) et peut sélectionner des formats spécifiques à extraire. Elle génère ensuite un dataset de sortie (`&cntlout`) en utilisant `PROC FORMAT` avec l'option `cntlout`. Un traitement spécifique est appliqué aux valeurs numériques (types 'I' et 'N') pour aligner les décimales via la macro `%mp_aligndecimal`, garantissant la comparabilité des plages. Un marqueur de ligne (`fmtrow`) est créé pour permettre le tri. Finalement, les tables temporaires utilisées sont supprimées via `PROC SQL`.
Analyse des données

Type : CREATION_INTERNE


La macro utilise `PROC FORMAT` avec l'option `cntlout` pour générer un dataset. Les sources primaires sont les définitions de formats SAS disponibles dans la librairie spécifiée par `libcat`, ainsi que les macros utilitaires internes (`%mf_getuniquename`, `%mddl_sas_cntlout`, `%mp_aligndecimal`).

1 Bloc de code
Macro Definition
Explication :
Définition de la macro `%mp_cntlout` qui prend des paramètres pour spécifier la librairie/catalogue de formats (`libcat`), le nom du jeu de données de sortie (`cntlout`), une liste de formats spécifiques (`fmtlist`), et une condition d'exécution (`iftrue`). Elle initialise également des noms de tables temporaires uniques.
Copié !
1%macro mp_cntlout(
2 iftrue=(1=1)
3 ,libcat=
4 ,cntlout=work.fmtextract
5 ,fmtlist=0
6)/*/STORE SOURCE*/;
7%local ddlds cntlds i;
8 
9%IF not(%eval(%unquote(&iftrue))) %THEN %return;
10 
11%let ddlds=%mf_getuniquename();
12%let cntlds=%mf_getuniquename();
2 Bloc de code
PROC FORMAT Data
Explication :
Utilise `PROC FORMAT` avec l'option `cntlout` pour générer un jeu de données de contrôle (`&cntlds`) à partir des formats de la librairie spécifiée (`&libcat`). Un bloc `%if` conditionnel permet de sélectionner des formats spécifiques s'ils sont fournis via `&fmtlist`. La référence `libcat` est potentiellement nettoyée si elle contient un suffixe '-FC'.
Copié !
1%mddl_sas_cntlout(libds=&ddlds)
2 
3%IF %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %THEN %DO;
4 %let libcat=%scan(&libcat,1,-);
5%END;
6 
7PROC FORMAT lib=&libcat cntlout=&cntlds;
8%IF "&fmtlist" ne "0" and "&fmtlist" ne "" %THEN %DO;
9 select
10 %DO i=1 %to %sysfunc(countw(&fmtlist,%str( ));
11 %scan(&fmtlist,&i,%str( ))
12 %END;
13 ;
14%END;
15RUN;
3 Bloc de code
DATA STEP Data
Explication :
Crée le jeu de données de sortie final (`&cntlout`) en combinant les informations des datasets temporaires (`&ddlds`, `&cntlds`). Il effectue un alignement décimal sur les colonnes numériques ('I', 'N') en utilisant la macro `%mp_aligndecimal` et crée un marqueur de ligne (`fmtrow`) pour le tri.
Copié !
1DATA &cntlout/nonote2err;
2 IF 0 THEN SET &ddlds;
3 SET &cntlds;
4 BY type fmtname notsorted;
5 
6 /* align the numeric values to avoid overlapping ranges */
7 IF type in ("I","N") THEN DO;
8 %mp_aligndecimal(start,width=16)
9 %mp_aligndecimal(END,width=16)
10 END;
11 
12 /* create row marker. Data cannot be sorted without it! */
13 IF first.fmtname THEN fmtrow=1;
14 ELSE fmtrow+1;
15 
16RUN;
4 Bloc de code
PROC SORT
Explication :
Trie le jeu de données de sortie (`&cntlout`) selon les variables `type`, `fmtname`, et `fmtrow`.
Copié !
1PROC SORT;
2 BY type fmtname fmtrow;
3RUN;
5 Bloc de code
PROC SQL
Explication :
Utilise `PROC SQL` pour supprimer les jeux de données temporaires (`&ddlds`, `&cntlds`) créés pendant l'exécution de la macro.
Copié !
1PROC SQL;
2drop TABLE &ddlds,&cntlds;
3QUIT;
6 Bloc de code
Macro End
Explication :
Termine la définition de la macro `%mp_cntlout`.
Copié !
1%mend mp_cntlout;
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
Simon
Expert SAS et fondateur.
« Les catalogues de formats sont souvent des 'boîtes noires' binaires difficiles à versionner.

Cette macro transforme ces métadonnées en actifs exploitables. En imposant un modèle de données rigoureux dès le départ (via %mddl_sas_cntlout) et en nettoyant les tables temporaires systématiquement, elle s'intègre parfaitement dans un pipeline de déploiement continu. C'est l'outil idéal pour extraire, auditer, puis réimporter des formats (CNTLIN) entre différents environnements tout en garantissant que la structure cible reste strictement identique à la source »