Guide SAS VIYA

Tutoriel SAS Viya : Tout savoir sur l'action table.tableInfoTout savoir sur l'action table.tableInfo

L'équipe WeAreCAS 19/02/2024 33 vues

Dans l'environnement SAS© Viya, la gestion des données en mémoire est cruciale. Avant de manipuler une table, il est souvent nécessaire de vérifier son existence, de connaître sa taille, ou de récupérer ses métadonnées (date de création, encodage, nombre de lignes).

C'est ici qu'intervient l'action tableInfo du jeu d'actions table.

Dans ce tutoriel, nous allons explorer comment utiliser cette commande essentielle pour l'exploration de données, depuis sa syntaxe de base jusqu'à la gestion avancée des caractères jokers.


Qu'est-ce que l'action tableInfo ?

L'action tableInfo permet d'obtenir des métadonnées détaillées sur une ou plusieurs tables chargées en mémoire dans un caslib spécifique.

Les paramètres clés :

  • caslib : Le nom de la bibliothèque CAS où se trouve la table.

  • name : Le nom de la table cible.

  • quiet : Un booléen (True/False). Si activé, il supprime les messages d'erreur si la table n'existe pas (très utile pour les scripts automatisés).

  • wildIgnore : Détermine si les caractères spéciaux (% et _) doivent être traités comme des jokers (wildcards) ou comme du texte littéral.

  • wildEscape : Définit le caractère d'échappement pour forcer la lecture littérale d'un joker.

Note :
Cas pratique 1 : Utilisation basique
Objectif : Vérifier les informations d'une table spécifique.

Dans ce premier exemple, nous allons charger une petite table en mémoire et demander ses informations. C'est l'utilisation la plus standard : vous connaissez le nom de la table et son emplacement.
1cas;
2 
3/* 1. Création d'une table temporaire en mémoire CAS */
4DATA casuser.ma_table_basique;
5 INPUT ID Name $ Value;
6 DATALINES;
7 1 Alice 100
8 2 Bob 150
9 3 Charlie 120
10;
11RUN;
12 
13/* 2. Afficher les informations de la table */
14PROC CAS;
15 TABLE.tableInfo RESULT=r /
16 name="ma_table_basique"
17 caslib="casuser";
18 PRINT r;
19RUN;
Nous créons d'abord une table ma_table_basique dans le caslib personnel casuser. Ensuite, l'action table.tableInfo est appelée. Le résultat (stocké dans la variable r) contiendra des colonnes comme Name, Rows (nombre de lignes), Columns (nombre de colonnes) et CreateTime.
Note :
Cas pratique 2 : Gérer les tables inexistantes (Option Quiet)
Objectif : Éviter que votre programme ne plante si une table est absente.

Lorsque vous automatisez des traitements, il arrive qu'une table ne soit pas encore chargée. Par défaut, SAS© renverrait une erreur. L'option quiet permet de gérer cela proprement.
1cas;
2 
3/* Création d'une table de référence */
4DATA samples.produits_ventes;
5 INPUT Annee Produit $ Quantite Prix;
6 DATALINES;
7 2023 A 10 100
8 2023 B 20 50
9;
10RUN;
11 
12PROC CAS;
13 /* Cas A : Table introuvable avec quiet=TRUE */
14 TABLE.tableInfo RESULT=r_non_existent /
15 name="table_introuvable"
16 quiet=TRUE;
17
18 PRINT "Tentative sur table inexistante :";
19 PRINT r_non_existent;
20 
21 /* Cas B : Table existante standard */
22 TABLE.tableInfo RESULT=r_existent /
23 name="produits_ventes"
24 caslib="Samples";
25
26 PRINT "Tentative sur table existante :";
27 PRINT r_existent;
28RUN;
Dans le Cas A, nous cherchons "table_introuvable". Grâce à quiet=TRUE, le journal ne affichera pas d'erreur rouge bloquante. L'objet résultat sera vide ou indiquera un statut "OK" mais sans données de table, ce qui permet à votre code de continuer son exécution (par exemple, pour charger la table manquante).
Note :
Dans le Cas A, nous cherchons "table_introuvable". Grâce à quiet=TRUE, le journal ne affichera pas d'erreur rouge bloquante. L'objet résultat sera vide ou indiquera un statut "OK" mais sans données de table, ce qui permet à votre code de continuer son exécution (par exemple, pour charger la table manquante).
1cas;
2 
3/* Création de plusieurs tables pour l'exemple */
4DATA casuser.donnees_2023_Q1; ID=1; RUN;
5DATA casuser.donnees_2023_Q2; ID=2; RUN;
6DATA casuser.donnees_2024_Q1; ID=3; RUN;
7 
8PROC CAS;
9 /* Rechercher toutes les tables commençant par "donnees_2023_" */
10 TABLE.tableInfo RESULT=r_wildcard /
11 name="donnees_2023_%" /* Le motif recherché */
12 caslib="casuser"
13 wildIgnore=FALSE; /* Active l'interprétation du '%' */
14
15 PRINT r_wildcard;
16RUN;
Ici, wildIgnore=FALSE est essentiel. Il dit à CAS : "Ne traite pas le caractère % comme une lettre, mais comme un joker". L'action retournera donc les métadonnées pour donnees_2023_Q1 et donnees_2023_Q2, mais ignorera celle de 2024.
Note :
Cas pratique 4 : Échapper les caractères spéciaux
Objectif : Trouver une table dont le nom contient réellement un % ou un _.

C'est un cas plus rare mais technique. Si votre table s'appelle resultat_final_%_test, comment la chercher sans que le % ne soit vu comme un joker ? Il faut utiliser un caractère d'échappement via wildEscape.
1cas;
2 
3/* Création d'une table avec un nom complexe */
4DATA casuser."resultat_final_%_test";
5 ID=10; Score=95.5;
6RUN;
7 
8PROC CAS;
9 TABLE.tableInfo RESULT=r_escape /
10 name="resultat_final_\%_test" /* Le \ protège le % */
11 caslib="casuser"
12 wildIgnore=FALSE /* On garde le mode wildcard actif */
13 wildEscape="\\"; /* On définit \ comme le protecteur */
14
15 PRINT r_escape;
16RUN;
Dans cet exemple :

wildIgnore=FALSE : Le mode wildcard est actif (nécessaire pour utiliser wildEscape).

wildEscape="\\" : Nous définissons l'antislash comme caractère de protection. (Note : on met deux antislashes car dans une chaîne SAS©, l'antislash doit lui-même être échappé).

name="...\%..." : L'antislash devant le pourcent indique à CAS de chercher le caractère % littéralement, et non pas de l'utiliser pour remplacer n'importe quel texte.

L'action tableInfo est bien plus qu'une simple commande de vérification. Maîtriser ses paramètres quiet et wildIgnore vous permet de construire des scripts ETL (Extract, Transform, Load) robustes et dynamiques dans SAS© Viya, capables de s'adapter à des environnements de données changeants.