26 août 2016

Dictionary : Un moyen pour faciliter les traitements !

Data & IA

Portrait collaborateur.

Julien

Baligant

Image ordinateur.

26 août 2016

Dictionary : Un moyen pour faciliter les traitements !

Data & IA

Portrait collaborateur.

Julien

Baligant

Image ordinateur.

26 août 2016

Dictionary : Un moyen pour faciliter les traitements !

Data & IA

Portrait collaborateur.

Julien

Baligant

Image ordinateur.

Aperçu dictionary : la vision TABLES

Le dictionnaire de données permet de récupérer facilement toutes les métadonnées qui vous sont accessibles : tables dans une librairie, colonnes dans une table, les indexes, les variables macros existantes, les options SAS, les contraintes sur certaines tables, etc.

Il est accessible avec le libref dictionary (le seul que SAS autorise à avoir plus de 8 caractères). C’est en fait un alias sur les tablesSASHELP.V* (ex : dictionary.tables = sashelp.vtable);

Deux tables du dictionnaire sont particulièrement utilisées :

  • TABLES : contient toutes les infos sur les tables actuellement définies, c’est-à-dire dont la librairie est assignée

  • COLUMNS : contient toutes les infos sur les colonnes de chacune des tables

En résumé, c’est comme si vous faisiez des centaines de PROC CONTENTS en même temps : il y a tellement d’infos qu’on a besoin de les filtrer.

L’exemple suivant affiche le nom, la date de modification, le nombre de lignes et de variables, et l’option de compression des tables (pas les vues, car MEMTYPE = « DATA ») de la libraire SASHELP


Le résultat :

Aperçu dictionary : la vision COLUMNS

Une autre table du dictionnaire très utile est COLUMNS. Elle donne tous les détails des métadonnées d’une table.

Comme dans beaucoup d’autres tables du dictionnaire, il est nécessaire de filtrer sur la paire LIBNAME (librairie) et MEMNAME (table).

Attention, petit détail contraignant, comme les champs sont sensibles à la casse, il faut bien penser à mettre le libref et le nom de la table en majuscules ou d’utiliser lowcase()/upcase().

Dans l’exemple suivant, on remarque qu’on peut tout à fait récupérer les métadonnées d’une librairie assignée sur un fichier Excel avec un libname XLSX.

On récupère dans ce cas-ci le nom de la variable, son type, sa longueur, son format et un flag indiquant si un tri la prenant en compte existe :


Dictionary et boucle macro pour faciliter les traitements

Etant donné que l’on récupère facilement les tables membres d’une librairie avec le dictionnaire, on peut le combiner avec un traitement macro pour automatiser une tâche sur toutes les tables d’une librairie.

Explication point par point avec un exemple :


Étape 1 : On crée la macro %BoucleLibrairie qui reçoit un libref en paramètre

Étape 2 : On compte le nombre de tables dans &LIBRAIRIE et on assigne ce compteur à la macro variable &CNT_TAB  (le trimmed  sert à enlever les blancs en trop).  La syntaxe into :var  (les deux points sont importants) sert à stocker une valeur dans une macro variable.

Étape 3 : En utilisant le compteur &CNT_TAB, on assigne à une série de macro variables &TAB1 jusque &TAB<&CNT_TAB> (par ex &TAB20 si &CNT_TAB=20) les noms des tables présentes dans la librairie &LIBRAIRIE. La syntaxe into :var1 - :var10  stocke par exemple 10 valeurs de &var1 jusque &var10.

Étape 4 : En bouclant sur les macro variables &TAB1 jusque &TAB<CNT_TAB>, on peut réaliser un traitement sur chacune des tables de la librairie. On utilise pour cela une variable incrémentée i.

Attention à la syntaxe : à chaque passage dans la boucle, SAS va résoudre &&TAB&i  en plusieurs étapes :

  • Si &i  vaut 1, SAS remplace &i  par 1, et &&  par &, donc &&TAB&i  devient &TAB1.

  • Tant qu’il y a des macros dans le code, SAS continue de les résoudre. Il va donc remplacer &TAB1 par la valeur récupérée dans la 2è requête SQL.


Pour lire et écrire dans des fichiers Excel avec LIBNAME XLXS : Cliquez ici.