Bei der Datenverarbeitung auf einem Server (insbesondere unter Unix) kommt es häufig vor, dass man Dateien bearbeiten muss, ohne ihren genauen Namen im Voraus zu kennen, sondern vielmehr ihre Position in einer sequenziellen Liste.
Stellen Sie sich folgendes Szenario vor: Ein Verzeichnis enthält etwa dreißig sequenziell benannte CSV-Dateien (z. B. a.txt, b.txt, usw.). Ihr Ziel ist es nicht, alles zu importieren, sondern gezielt die 27. Datei dieser Liste, unabhängig von ihrem Namen, zur Datenverarbeitung auszuwählen.
Hier ist eine robuste Methode, um eine bestimmte Datei basierend auf ihrer Position zu identifizieren, zu extrahieren und zu lesen, unter Verwendung der Systemfunktionen von SAS©.
Die 3-Schritte-Strategie
Um sicherzustellen, dass wir wirklich die 27. Datei in alphabetischer (oder sequenzieller) Reihenfolge auswählen, können wir uns nicht auf die einfache Lesereihenfolge des Betriebssystems verlassen, die zufällig sein kann.
Das zu befolgende Verfahren ist wie folgt:
Verzeichnisinhalt auflisten: Verwenden Sie die SAS©-Dateiverwaltungsfunktionen, um alle vorhandenen Dateinamen zu lesen.
Liste sortieren: Ordnen Sie die Namen, um die Sequenzialität (A bis Z) sicherzustellen.
Zieldatei extrahieren: Verwenden Sie einen direkten Zugriff (Zeiger), um den Namen der Datei an der Position N (hier 27) abzurufen und in einer Makrovariablen zu speichern.
Technische Umsetzung
Schritt 1 und 2: Abrufen und Sortieren
Zuerst erstellen wir eine SAS©-Tabelle (fnames), die die Liste aller Dateien im Ordner enthält. Dazu verwenden wir die Funktionen DOPEN (um den Ordner zu öffnen), DNUM (um die Dateien zu zählen) und DREAD (um die Namen zu lesen).
Wichtiger Hinweis: Es ist entscheidend, alle Dateien vor dem Sortieren zu lesen. Wenn man aufhört, bei der 27. gefundenen Datei zu lesen, durch die
Schritt 3: Direkte Auswahl mit der Option POINT=
Sobald die Liste sortiert ist, müssen wir nicht die gesamte Tabelle lesen. Die Anweisung SET mit der Option POINT= ermöglicht es, direkt zur gewünschten Zeile zu springen.
Dieser Ansatz ist universell. Ob Sie die 27. oder die 100. Datei suchen, die Logik bleibt dieselbe. Sobald der Dateiname in der Makrovariablen &mon_fichier gespeichert ist, können Sie ihn dynamisch in einer Importprozedur (wie PROC IMPORT) oder einem klassischen Data-Step verwenden, um den Inhalt der Datei zu lesen.