Troubleshooting

Comprendre et résoudre l'erreur "Type of name is unknown" dans PROC TABULATE

Simon 26/09/2017 5 vues

Lors de la création de rapports sommaires avec SAS© (que ce soit via SAS© Data Integration Studio ou en code Base SAS©), la procédure PROC TABULATE est un outil puissant. Cependant, il arrive fréquemment de rencontrer un message d'erreur bloquant lors de la soumission du job, ressemblant à ceci :

ERROR: The type of name (nom_de_variable) is unknown.

Le premier réflexe est souvent de penser à un bug logiciel ou à un correctif (hotfix) manquant. Pourtant, dans la grande majorité des cas, il s'agit d'un problème de syntaxe fondamentale lié à la logique de PROC TABULATE.

Illustration

La règle d'or : CLASS vs VAR

La règle d'or : CLASS vs VAR

Pour comprendre l'erreur, il faut comprendre comment SAS© traite les données dans cette procédure. Contrairement à d'autres procédures, PROC TABULATE exige que chaque variable mentionnée dans l'instruction TABLE soit préalablement définie.

SAS© a besoin de savoir comment traiter la variable :

  1. Est-ce une variable de classification qui va créer des lignes ou des colonnes ?

  2. Est-ce une variable numérique sur laquelle des statistiques (sommes, moyennes) seront calculées ?

Si une variable apparaît dans TABLE sans avoir été déclarée, SAS© ne connaît pas son "type" d'usage, d'où l'erreur "unknown".

La solution

Pour corriger ce problème, vous devez définir l'usage de vos variables à l'aide des instructions CLASS et VAR.

  • L'instruction CLASS : Utilisez-la pour les variables catégorielles (ex: Département, Nom du cours, Section). Ce sont les variables qui créent les "buckets" ou les regroupements.

  • L'instruction VAR : Utilisez-la pour les variables d'analyse (ex: Coût total, Salaire). Ce sont les variables sur lesquelles les calculs sont effectués.

Exemple concret

Imaginons que vous souhaitiez créer un tableau croisant le nom du cours avec le département, la section et le coût total.

Le code incorrect (qui génère l'erreur) :

1PROC TABULATE DATA=ma_table;
2 /* Erreur : SAS ne sait pas ce que sont course_name, department, etc. */
3 TABLE course_name, department*section*tot_cost;
4RUN;

Le code corrigé :

Ici, nous définissons course_name, department et section comme des variables de classification, et tot_cost comme la variable à analyser.

1PROC TABULATE DATA=ma_table;
2 /* Déclaration des variables de classification (catégories) */
3 class course_name department section;
4
5 /* Déclaration de la variable d'analyse (chiffres) */
6 var tot_cost;
7
8 /* La table peut maintenant être générée */
9 TABLE course_name, department*section*tot_cost;
10RUN;

Avant de contacter le support technique ou de chercher un patch logiciel, vérifiez toujours votre syntaxe. Si vous utilisez une variable dans la structure de votre tableau (TABLE), assurez-vous qu'elle est bien listée soit dans l'instruction CLASS, soit dans l'instruction VAR.