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-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

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