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!
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.