hallo zusammen,
Um meinen letzten Programmlauf zu ermitteln, möchte ich über den DOS-Befehl DIR ein Windows-Verzeichnis auslesen.
filename dateien pipe 'dir "C:\Dateiablage\" /A:-D /O:-D' lrecl=2000;
data _null_;
infile dateien truncover;
input inhalt $2000.;
run;
Das funktioniert soweit. Im Programm wird der Ausgabepfad (C:\Dateiablage\) aber mehrfach genutzt, daher befindet er sich in der Makrovariablen AUSGABE.
Meine Versucht, diese Makrovariable im filename-Statement zu nutzen, scheitern kläglich:
%let AUSGABE = C:\Dateiablage\;
%let DIR = %str(%'dir %"&AUSGABE.%" /A:-D /O:-D%');
%put &DIR.;
filename dateien pipe &DIR. lrecl=2000;
data dateien;
infile dateien truncover;
input datei $2000.;
run;
Fehlermeldung:
ERROR: Error in the FILENAME statement.
ERROR 23-2: Ungültiger Optionsname dir.
Weiß einer Rat?
In dem zweiten Filename-Statement stört bei der Auflösung von &DIR die (unsichtbare) Maskierung, die durch die %STR-Funktion bewirkt wurde. Man kann diese mit Hilfe der %UNQUOTE-Funktion wieder rückgängig machen oder, noch einfacher, von vornherein auf sie verzichten, indem man das Problem der geschachtelten Strings in Anführungszeichen durch Verdoppelung der inneren Anführungszeichen löst.
Möglichkeit 1: Verwendung von %UNQUOTE
filename dateien pipe %unquote(&DIR.) lrecl=2000;
Möglichkeit 2 (einfacher): Verdoppelung der inneren Anführungszeichen
%let DIR = "dir ""&AUSGABE."" /A:-D /O:-D";
Meine Hochachtung an Tom_Wende und FreelanceReinhard an einem Samstag SAS Fragen zu beantworten!
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!