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.
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.
cas;
/* 1. Création d'une table temporaire en mémoire CAS */
DATA casuser.ma_table_basique;
INPUT ID Name $ Value;
DATALINES;
1 Alice 100
2 Bob 150
3 Charlie 120
;
RUN;
/* 2. Afficher les informations de la table */
PROC CAS;
TABLE.tableInfo RESULT=r /
name="ma_table_basique"
caslib="casuser";
PRINT r;
RUN;
1
cas;
2
3
/* 1. Création d'une table temporaire en mémoire CAS */
4
DATA casuser.ma_table_basique;
5
INPUT ID Name $ Value;
6
DATALINES;
7
1 Alice 100
8
2 Bob 150
9
3 Charlie 120
10
;
11
RUN;
12
13
/* 2. Afficher les informations de la table */
14
PROC CAS;
15
TABLE.tableInfo RESULT=r /
16
name="ma_table_basique"
17
caslib="casuser";
18
PRINT r;
19
RUN;
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.
cas;
/* Création d'une table de référence */
DATA samples.produits_ventes;
INPUT Annee Produit $ Quantite Prix;
DATALINES;
2023 A 10 100
2023 B 20 50
;
RUN;
PROC CAS;
/* Cas A : Table introuvable avec quiet=TRUE */
TABLE.tableInfo RESULT=r_non_existent /
name="table_introuvable"
quiet=TRUE;
PRINT "Tentative sur table inexistante :";
PRINT r_non_existent;
/* Cas B : Table existante standard */
TABLE.tableInfo RESULT=r_existent /
name="produits_ventes"
caslib="Samples";
PRINT "Tentative sur table existante :";
PRINT r_existent;
RUN;
1
cas;
2
3
/* Création d'une table de référence */
4
DATA samples.produits_ventes;
5
INPUT Annee Produit $ Quantite Prix;
6
DATALINES;
7
2023 A 10100
8
2023 B 2050
9
;
10
RUN;
11
12
PROC 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;
28
RUN;
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).
cas;
/* Création de plusieurs tables pour l'exemple */
DATA casuser.donnees_2023_Q1; ID=1; RUN;
DATA casuser.donnees_2023_Q2; ID=2; RUN;
DATA casuser.donnees_2024_Q1; ID=3; RUN;
PROC CAS;
/* Rechercher toutes les tables commençant par "donnees_2023_" */
TABLE.tableInfo RESULT=r_wildcard /
name="donnees_2023_%" /* Le motif recherché */
caslib="casuser"
wildIgnore=FALSE; /* Active l'interprétation du '%' */
PRINT r_wildcard;
RUN;
1
cas;
2
3
/* Création de plusieurs tables pour l'exemple */
4
DATA casuser.donnees_2023_Q1; ID=1; RUN;
5
DATA casuser.donnees_2023_Q2; ID=2; RUN;
6
DATA casuser.donnees_2024_Q1; ID=3; RUN;
7
8
PROC 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;
16
RUN;
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.
cas;
/* Création d'une table avec un nom complexe */
DATA casuser."resultat_final_%_test";
ID=10; Score=95.5;
RUN;
PROC CAS;
TABLE.tableInfo RESULT=r_escape /
name="resultat_final_\%_test" /* Le \ protège le % */
caslib="casuser"
wildIgnore=FALSE /* On garde le mode wildcard actif */
wildEscape="\\"; /* On définit \ comme le protecteur */
PRINT r_escape;
RUN;
1
cas;
2
3
/* Création d'une table avec un nom complexe */
4
DATA casuser."resultat_final_%_test";
5
ID=10; Score=95.5;
6
RUN;
7
8
PROC 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;
16
RUN;
Dans cet exemple :
wildIgnore=FALSE : Le mode wildcard est actif (nécessaire pour utiliser wildEscape).
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.
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.