Die Funktionen PATHNAME()
und GETOPTION()
geben unterschiedliche Ergebnisse für SASAUTOS
zurück, wodurch Zweifel entstehen, welche Verzeichnisse für AUTOCALL verwendet werden. Gibt es SASAUTOS
existieren als zwei verschiedene "Dinge" passiert, um den gleichen Namen zu besitzen?SAS - So ermitteln Sie, welche Bibliotheken in SASAUTOS enthalten sind
Um etwas Hintergrundwissen zu liefern, verwalte ich ein Verzeichnis für persönliche Dienstprogrammmakros, deren Pfad zu meiner Konfigurationsdatei hinzugefügt wurde.
-SET SASAUTOS (
"!SASROOT\core\sasmacro"
"!SASROOT\aacomp\sasmacro"
"!SASROOT\accelmva\sasmacro"
"!SASROOT\assist\sasmacro"
"!SASROOT\dmscore\sasmacro"
"!SASROOT\ets\sasmacro"
"!SASROOT\gis\sasmacro"
"!SASROOT\graph\sasmacro"
"!SASROOT\hps\sasmacro"
"!SASROOT\iml\sasmacro"
"!SASROOT\or\sasmacro"
"!SASROOT\qc\sasmacro"
"!SASROOT\stat\sasmacro"
"C:\USERS\ME\PERSONAL AUTOCALL"
)
Dies verhält sich wie erwartet. Wenn ich SAS lade, kann ich alle Makros aufrufen, die sich im Verzeichnis PERSONAL AUTOCALL
befinden.
Ich habe auch einen komplexen Prozess, der eine Vielzahl von problemspezifischen Makros erfordert. Diese befinden sich in einem separaten Verzeichnis von meinem PERSONAL AUTOCALL
. Da diese Makros unabhängig davon verfügbar sein sollten, wer den Prozess ausführt, sind sie nicht in der Konfigurationsdatei enthalten. Stattdessen lade ich SAS das Verzeichnis in der autocall Suchhierarchie innerhalb der Sitzung. Ich tue dies, indem ich die folgende Aussage mache.
options mautosource mrecall sasautos = (SASAUTOS, 'Z:\Path\To\COMPLEX PROCESS AUTOCALL');
Auch dies verhält sich wie erwartet. Wenn das erste Argument SASAUTOS
von der Optionsanweisung ausgeschlossen wird, können nur die Makros COMPLEX PROCESS AUTOCALL
aufgerufen werden und umgekehrt.
Das Problem tritt auf, wenn ich überwache, welche Verzeichnisse in der Autocall-Suchhierarchie sind. Um dies zu tun, erstelle ich:
%put %sysfunc(pathname(sasautos));
Dies gibt die genaue Liste in meiner Konfig-Datei, die oben angegeben. Es fehlt der Pfad COMPLEX PROCESS AUTOCALL
, obwohl die Option SASAUTOS=
enthalten ist und diese Makros Call-fähig sind.
Wenn ich stattdessen
%put %sysfunc(getoption(sasautos));
dann folgenden zurückgegeben.
(SASAUTOS, "'C:\Path\To\COMPLEX PROCESS AUTOCALL'")
Während die Kombination der beiden %put
Aussagen liefern, was ich glaube, dass eine vollständige Auflistung der Autocall-Bibliotheken ist, bin ich ratlos, warum beide benötigt werden.
PATHNAME() gibt den Namen einer Datenbibliothek zurück, in diesem Fall SASAUTOS
, die mindestens im Kontext der aktuellen Sitzung mit COMPLEX PROCESS AUTOCALL
angehängt sein sollte.
GETOPTION() gibt den Wert einer SAS-Systemoption zurück. Anscheinend unterscheidet sich die Systemoption von der Datenbibliothek.
Bedeuten die verschiedenen Rückgabewerte tatsächlich, dass zwei verschiedene SASAUTOS
"Dinge" existieren, eine Bibliothek und die andere eine Option? Wenn ja, wie interagieren sie? Wie kann ich angesichts dieser unerwarteten Diskrepanz sicher sein, dass keine anderen Verzeichnisse als die aufgelisteten Verzeichnisse durchsucht werden?
SAS wurde nicht zum automatischen Erstellen der SASAUTOS-Dateiref auf allen Plattformen verwendet. Ich musste es definitiv erstellen, um sicherzustellen, dass sowohl Unix- als auch Windows-Umgebungen ähnlich waren. Vielleicht ist es jetzt? – Tom
@Tom Nun, diese Seite ist generisch (nicht von den Betriebssystemspezifikationen), also - vielleicht? Ich habe kein Unix-SAS mehr, um es zu testen, aber ich denke, SAS/UE würde sich technisch qualifizieren? – Joe
Hinzufügen eines Fileref - ordentlich - wie dies auch um die Grenze/Einschränkung von wie viele Werte "einfügen" in SASAUTOS umgehen sollte. –