Im SAS©-Universum ist es üblich, historische Daten zu konsolidieren, die in derselben Bibliothek gespeichert sind. Während der Vorgang mit standardisierten Dateinamen (z.B. DATA_202301, DATA_202302) trivial ist, wird er gefährlich, wenn die Dateien aus Excel-Importen oder Altsystemen stammen, die Leerzeichen, Symbole ($, &) oder „Freitext“-Formate verwenden.
Dieser Artikel zeigt Ihnen, wie Sie den gesamten Inhalt einer Bibliothek dynamisch verketten können, selbst wenn die Tabellennamen programmatisch unmöglich zu handhaben scheinen.
Nehmen wir das Beispiel einer Bibliothek namens RH_ARCHIVE. Sie enthält monatliche Exporte, die sehr wörtlich benannt sind und Leerzeichen sowie Sonderzeichen enthalten:
Wenn Sie einen klassischen Ansatz versuchen, indem Sie die Liste der Tabellen über dictionary.tables abrufen und in einen DATA-Schritt einfügen, wird SAS© fehlschlagen.
Warum? Weil SAS© 'MÄRZ 2024 & PRÄMIEN' als drei separate Objekte interpretiert (MÄRZ, 2024, &, PRÄMIEN). Außerdem wird es ohne expliziten Verweis auf die Bibliothek diese Tabellen in WORK suchen.
Sie werden unweigerlich den Fehler erhalten:
Um diese Tabellen zu bearbeiten, erfordert SAS© eine präzise Syntax, die als „Name Literal“ (Namensliteral) bezeichnet wird und wie folgt aussieht: 'Tabellenname'n. Es ist auch zwingend erforderlich, den Bibliotheksnamen voranzustellen.
Anstatt den Code für jede Datei manuell zu schreiben, verwenden wir PROC SQL, um die exakte Syntax zu generieren.
Der optimierte Code
Das Ziel ist es, eine Zeichenkette zu erstellen, die so aussieht:
RH_ARCHIVE.'JANUAR 2024 STAFFING$'n
Hier ist der Code, um dies mit der Funktion CATT zu automatisieren:
quote(MEMNAME): Diese Funktion umschließt den abgerufenen Namen (z.B. MÄRZ 2024 & PRÄMIEN) mit doppelten Anführungszeichen. Dies „schützt“ die Leerzeichen und Sonderzeichen.
'n': Indem man dieses Suffix nach den Anführungszeichen anfügt, teilt man der SAS©-Engine mit, dass es sich nicht um eine Textzeichenfolge, sondern um einen gültigen Tabellennamen (ein Literal) handelt.
'RH_ARCHIVE.': Man erzwingt den Speicherort der Quelle. Ohne dies würde SAS© die physische Datei nicht finden.
Diese Technik ist universell: Sie funktioniert unabhängig von der „Sauberkeit“ Ihrer Quelldateinamen. Bevorzugen Sie jedoch für Ihre zukünftigen Tabellen immer den SAS©-Standard (keine Leerzeichen, Verwendung des Unterstrichs _, keine Sonderzeichen), um die Wartung Ihrer Programme zu erleichtern.