LesezeichenAbonnierenRSS-Feed abonnieren
Heide
Calcite | Level 5

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?

4 ANTWORTEN 4
Tom_Wende
SAS Employee
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
FreelanceReinh
Jade | Level 19

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

 

Heide
Calcite | Level 5
Es funktioniert!! Vielen lieben Dank!
AndreasMenrath
Pyrite | Level 9

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

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

Diskussionsstatistiken
  • 4 Antworten
  • 1601 Aufrufe
  • 2 Kudos
  • 4 in Unterhaltung