Troubleshooting

Verständnis und Lösung des Fehlers "Type of name is unknown" in PROC TABULATE

Simon 26/09/2017 2 views

Bei der Erstellung von zusammenfassenden Berichten mit SAS© (sei es über SAS© Data Integration Studio oder in Base SAS©-Code) ist die Prozedur PROC TABULATE ein leistungsstarkes Werkzeug. Es kommt jedoch häufig vor, dass beim Absenden des Jobs eine blockierende Fehlermeldung auftritt, die etwa so aussieht:

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

Der erste Reflex ist oft, an einen Softwarefehler oder einen fehlenden Hotfix zu denken. In der großen Mehrheit der Fälle handelt es sich jedoch um ein grundlegendes Syntaxproblem, das mit der Logik von PROC TABULATE zusammenhängt.

Illustration

Die goldene Regel: CLASS vs. VAR

Die goldene Regel: CLASS vs. VAR

Um den Fehler zu verstehen, muss man verstehen, wie SAS© die Daten in dieser Prozedur verarbeitet. Im Gegensatz zu anderen Prozeduren verlangt PROC TABULATE, dass jede in der TABLE-Anweisung erwähnte Variable vorab definiert wird.

SAS© muss wissen, wie die Variable zu behandeln ist:

  1. Handelt es sich um eine Klassifikationsvariable, die Zeilen oder Spalten erstellen wird?

  2. Handelt es sich um eine numerische Variable, für die Statistiken (Summen, Mittelwerte) berechnet werden?

Wenn eine Variable in der TABLE-Anweisung erscheint, ohne deklariert worden zu sein, kennt SAS© ihren Verwendungstyp nicht, daher der Fehler "unknown".

Die Lösung

Um dieses Problem zu beheben, müssen Sie die Verwendung Ihrer Variablen mit den Anweisungen CLASS und VAR definieren.

  • Die CLASS-Anweisung: Verwenden Sie sie für kategoriale Variablen (z.B. Abteilung, Kursname, Sektion). Dies sind die Variablen, die die "Buckets" oder Gruppierungen erstellen.

  • Die VAR-Anweisung: Verwenden Sie sie für Analysevariablen (z.B. Gesamtkosten, Gehalt). Dies sind die Variablen, mit denen die Berechnungen durchgeführt werden.

Konkretes Beispiel

Stellen Sie sich vor, Sie möchten eine Kreuztabelle erstellen, die den Kursnamen mit der Abteilung, der Sektion und den Gesamtkosten kreuzt.

Der falsche Code (der den Fehler erzeugt):

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;

Der korrigierte Code:

Hier definieren wir course_name, department und section als Klassifikationsvariablen und tot_cost als die zu analysierende Variable.

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;

Bevor Sie den technischen Support kontaktieren oder nach einem Software-Patch suchen, überprüfen Sie immer Ihre Syntax. Wenn Sie eine Variable in der Struktur Ihrer Tabelle (TABLE) verwenden, stellen Sie sicher, dass sie entweder in der CLASS-Anweisung oder in der VAR-Anweisung aufgeführt ist.