Orientierung in der SAS-Umgebung – Pfadangaben zu Bibliotheken, Formatkatalogen und Programmen

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

Von Carina Ortseifen aus: Carina Ortseifen, Grischa Pfister, Heribert Ramroth, Marianne Weires: Tipps und Tricks für den leichteren Umgang mit der SAS Software, KSFE 2010.

Der Programmierer steht häufiger mal vor dem Problem, Pfadangaben dynamisch bestimmen zu müssen. Oder eine Ausgabe soll mit dem Namen des Programms versehen werden, von dem es erzeugt wurde. Beim interaktiven Arbeiten ist dies kein Problem, nicht so im Batchmodus. Im nun folgenden Tipp werden einige Möglichkeiten dazu vorgestellt.

Bibliotheken und Datei-Referenzen

Die Funktion PATHNAME() liefert den vollständigen Pfad von Bibliotheken und Datei-Referenzen. Im offenen Programmcode kann diese Funktion mit der Makrofunktion %SYSFUNC genutzt werden.

Im folgenden Beispiel wird zunächst die Datei-Referenz saspgm definiert und dann anschließend mit PATHNAME() aufgelöst und der Makrovariablen pgmpfad zugewiesen:

Filename saspgm "E:\ksfe-14\TuT\TuT-CO3.sas";
%Let pgmpfad=%Sysfunc(Pathname(saspgm));
%Put &pgmpfad;

Den physikalischen Ordner der Work-Bibliothek liefern folgende Zeilen:

* Bibliotheken;
%Let workpfad=%Sysfunc(Pathname(Work));
%Put &workpfad;

Im Log-Fenster erscheint daraufhin:

C:\DOKUME~1\x16.AD\LOKALE~1\Temp\SAS Temporary Files\_TD152

Das ganze funktioniert auch bei verbundenen Bibliotheken wie etwa SASAUTOS:

* Verbundene Bibliotheken;
%Let sasautospfad=%Sysfunc(Pathname(sasautos));
%Put &sasautospfad;
('C:\Programme\SAS\SASFoundation\9.2\core\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\accelmva\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\inttech\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\assist\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\eis\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\ets\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\genetics\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\graph\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\iml\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\or\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\qc\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\share\sasmacro'
'C:\Programme\SAS\SASFoundation\9.2\stat\sasmacro')

Alternativ können zu diesem Zweck auch die beiden Dictionary Tables Dictionary.Libnames und Dictionary.Extfiles verwendet werden. Neben den Pfadangaben werden dort weitere Informationen, zum Beispiel die Engines gespeichert, wie das folgende Beispiel zeigt:

Proc SQL Noprint;
 * Describe Table Dictionary.Libnames;
   Select path, engine into :workpfadsql,:workengine
      From Dictionary.Libnames
          Where libname="WORK";
Quit;

%Put &workpfadsql;
%Put &workengine;

Im Log-Fenster erscheint:

12 %Put &workpfadsql;
C:\DOKUME~1\x16.AD\LOKALE~1\Temp\SAS Temporary Files\_TD152
13 %Put &workengine;
V9

Und auch Dateireferenzen können abgefragt werden:

Proc SQL Noprint;
 * Describe Table Dictionary.Extfiles;
   Select xpath into :pgmpfadsql
      From Dictionary.Extfiles
          Where Lowcase(fileref)="saspgm";
Quit;
%Put &pgmpfadsql;

Im Log erscheint:

E:\ksfe-14\TuT\TuT-CO3.sas

Formatkataloge

Formate werden vom SAS System in Katalogen namens Formats.Sas7bdat. Das System kann mehrere Kataloge in verschiedenen Ordnern (oder Bibliotheken) verwalten. Wird ein Format im Daten- oder Prozedurschritt verwendet, durchsucht das System in einer festgelegten Reihenfolge die vorhandenen Formatkataloge nach dem gewünschten Format.

Die Reihenfolge, in der die Kataloge durchsucht werden, legt die Systemoption FMTSEARCH fest. Die Einstellung dieser Option kann mit der Funktion GETOPTION() abgefragt werden. Die folgenden Zeilen

%Let formatpfad=%Sysfunc(getoption(fmtsearch));
%Put &formatpfad;

liefern die zu durchsuchenden Bibliotheken:

(WORK LIBRARY)

Kombiniert man die Funktion PATHNAME() mit den Ergebnissen der Option FMTSEARCH, erhält man die kompletten Pfade.

Name des ausführenden Programms

Ergebnisse von Prozedurschritten, Tabellen und Grafiken müssen häufig mit dem Namen des Programms, das sie generiert hat, beschriftet werden, um bei notwendigen Änderungen nicht lange suchen zu müssen oder um eine sorgfältige Dokumentation zu erhalten.

Wenn man im Batchmodus arbeitet, steht mit der Systemoption SYSIN in Kombination mit der Funktion GETOPTION() eine einfache Methode zur Verfügung, dies zu erreichen. Arbeitet man dagegen interaktiv, zum Beispiel mit SAS unter Windows, liefert SYSIN keine Informationen. Stattdessen greift man auf Umgebungsvariablen des Betriebssystems zu. Unter Windows heißen diese SAS_ExecFileName und SAS_ExecFilePath. Diese Variablen können mit der Funktion %SYSGET() abgefragt werden, wie das folgende Beispiel zeigt:

%Let saspgm=%Sysget(sas_execfilepath);
Title SAS-Tabelle sashelp.class;
Footnote "Erzeugt mit &saspgm";
Proc Print Data=sashelp.class;
Run;

Die Fußzeile der Ausgabe hat folgende Form:

Erzeugt mit \\netfile1...\home\x\x16\KSFE 2010\TuT-CO3.sas

Literatur

[1] Arthur L. Carpenter: The Path, The Whole Path, And Nothing But the Path, So Help Me Windows. SAS Global Forum 2008. http://www2.sas.com/proceedings/forum2008/023-2008.pdf