Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
New Contributor
Beiträge: 4
Fehler im filename-statement mit Makrovariable

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?

SAS Employee
Beiträge: 2
Re: Fehler im filename-statement mit Makrovariable
Ich hab leider gerade kein SAS zum probieren da, aber aus dem Bauch raus würd ich sagen: Anstatt %str, %bquote nehmen, weil der Wert der Makrovariable bei der Programmausführung maskiert weden soll
Trusted Advisor
Beiträge: 1.116
Re: Fehler im filename-statement mit Makrovariable

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";

 

New Contributor
Beiträge: 4
Re: Fehler im filename-statement mit Makrovariable
Es funktioniert!! Vielen lieben Dank!
Frequent Contributor
Beiträge: 121
Re: Fehler im filename-statement mit Makrovariable

Meine Hochachtung an Tom_Wende und FreelanceReinhard an einem Samstag SAS Fragen zu beantworten!