Das Makro verarbeitet keine SAS-Datasets. Es arbeitet direkt im Dateisystem unter Verwendung eines als Parameter übergebenen Verzeichnispfades.
1 Codeblock
Makro %mf_mkdir
Erklärung : Dieser Block enthält die vollständige Definition des Makros `%mf_mkdir`.
Das Makro nimmt einen Verzeichnispfad (`dir`) als Parameter entgegen.
Es beginnt mit Eingabeprüfungen: Es erkennt und ignoriert Pfade, die Laufwerksbuchstaben sind (z.B. 'C:') und entfernt abschließende Schrägstriche, falls vorhanden, außer für das Stammverzeichnis.
Dies gewährleistet eine konsistente Pfadbehandlung.
Der Kern der Logik ist ein bedingter Block, der ausgeführt wird, wenn das Zielverzeichnis nicht existiert (überprüft durch `%sysfunc(fileexist)`).
Innerhalb dieses Blocks:
1. Der Pfad wird zerlegt, um die letzte Komponente (`child`) und den Pfad seines Elternteils (`parent`) zu identifizieren.
2. Das Makro ruft sich selbst rekursiv auf (`%mf_mkdir(&parent)`), um sicherzustellen, dass alle Elternverzeichnisse existieren, bevor versucht wird, das aktuelle Verzeichnis zu erstellen.
3. Das Verzeichnis `child` wird im `parent` unter Verwendung der Funktion `%sysfunc(dcreate(&child, &parent))` erstellt. Diese Funktion ist mit Windows- und Unix-Dateisystemen kompatibel.
4. Eine rudimentäre Fehlerbehandlung ist enthalten: Wenn `dcreate` fehlschlägt (eine leere Zeichenkette zurückgibt), wird eine Fehlermeldung (`%put ERROR:`) angezeigt und die Ausführung der SAS-Sitzung abgebrochen (`%abort cancel`).
Im Erfolgsfall wird eine Bestätigungsmeldung angezeigt.
Das Makro ist idempotent konzipiert: Wenn das Verzeichnis bereits existiert, tut es nichts und beendet sich stillschweigend.
Kopiert!
%macro mf_mkdir(dir
)/*/STORE SOURCE*/;
%local lastchar child parent;
%let lastchar = %substr(&dir, %length(&dir));
%if (%bquote(&lastchar) eq %str(:)) %then %do;
/* Cannot create drive mappings */
%return;
%end;
%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\\_)) %then %do;
/* last char is a slash */
%if (%length(&dir) eq 1) %then %do;
/* one single slash - root location is assumed to exist */
%return;
%end;
%else %do;
/* strip last slash */
%let dir = %substr(&dir, 1, %length(&dir)-1);
%end;
%end;
%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;
/* directory does not exist so prepare to create */
/* first get the childmost directory */
%let child = %scan(&dir, -1, %str(/\\:));
/*
If child name = path name then there are no parents to create. Else
they must be recursively scanned.
*/
%if (%length(&dir) gt %length(&child)) %then %do;
%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));
%mf_mkdir(&parent)
%end;
/*
Now create the directory. Complain loudly of any errs.
*/
%let dname = %sysfunc(dcreate(&child, &parent));
%if (%bquote(&dname) eq ) %then %do;
%put %str(ERR)OR: could not create &parent + &child;
%abort cancel;
%end;
%else %do;
%put Directory created: &dir;
%end;
%end;
/* exit quietly if directory did exist.*/
%mend mf_mkdir;
1
%macro mf_mkdir(dir
2
)/*/STORE SOURCE*/;
3
4
%local lastchar child parent;
5
6
%let lastchar = %substr(&dir, %LENGTH(&dir));
7
%IF (%bquote(&lastchar) eq %str(:)) %THEN %DO;
8
/* Cannot create drive mappings */
9
%return;
10
%END;
11
12
%IF (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\\_)) %THEN %DO;
13
/* last char is a slash */
14
%IF (%LENGTH(&dir) eq 1) %THEN %DO;
15
/* one single slash - root location is assumed to exist */
Now create the directory. Complain loudly of any errs.
41
*/
42
43
%let dname = %sysfunc(dcreate(&child, &parent));
44
%IF (%bquote(&dname) eq ) %THEN %DO;
45
%put %str(ERR)OR: could not create &parent + &child;
46
%abort cancel;
47
%END;
48
%ELSE %DO;
49
%put Directory created: &dir;
50
%END;
51
%END;
52
/* exit quietly if directory did exist.*/
53
%mend mf_mkdir;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright (c) 2001-2006 Rodney Sparapani; Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de (Informationen aus der in der Makrohilfe referenzierten Datei _version.sas extrahiert).
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.