Veröffentlicht am :
Makro CREATION_INTERNE

Makro zur Überprüfung der Existenz eines Datasets

Dieser Code ist auch verfügbar auf: Français English Español
Wartet auf Validierung
Das Ziel dieses Makros ist es, eine zuverlässige Methode zur Überprüfung der Existenz eines SAS©-Datasets bereitzustellen. Es akzeptiert den Dataset-Namen als Positionsparameter. Die interne Logik isoliert zunächst die Bibliothek und den Member-Namen. Eine spezielle Behandlung wird für die SASHELP-Bibliothek angewendet, bei der nur eine vordefinierte Liste von Dictionary-Ansichten als existent betrachtet wird. Für eine spezifisch benannte Bibliothek 'DB' gibt das Makro systematisch 1 (wahr) zurück, was als Workaround für virtuelle Datasets dient. In allen anderen Fällen konstruiert es den physischen Pfad und verwendet Funktionen und Makros (%sysfunc(pathname), %_exist), um die Existenz der Datei auf dem System zu überprüfen, indem es mögliche SAS©-Dateisuffixe (z.B. .sas©7bdat, .sastbvw) testet.
Datenanalyse

Type : CREATION_INTERNE


Das Makro selbst liest oder erstellt keine Daten, es überprüft deren Existenz. Der in den Kommentaren bereitgestellte Validierungsblock erstellt temporäre Test-Datasets (`WORK.DATA_n`, `PWD.TEST2`), um die korrekte Funktion des Makros zu überprüfen.

1 Codeblock
MACRO
Erklärung :
Definition des Makros _dsexist. Es akzeptiert einen Dataset-Namen als Argument. Es extrahiert die Bibliothek und den Tabellennamen und wendet dann eine bedingte Logik an: eine spezifische Behandlung für die Dictionary-Ansichten der SASHELP-Bibliothek, einen festen Rückgabewert für eine 'DB'-Bibliothek und eine Überprüfung der physischen Dateiexistenz für alle anderen Bibliotheken.
Kopiert!
1%macro _dsexist(arg1, DATA=&arg1);
2 
3%local lib;
4 
5%let lib=%_lib(&DATA);
6%let DATA=%_data(&DATA);
7%*put LIB=&lib;
8%IF &lib=sashelp %THEN %DO;
9 %IF &DATA=vcatalg | &DATA=vcolumn | &DATA=vextfl | &DATA=vindex |
10 &DATA=vmacro | &DATA=vmember | &DATA=voption | &DATA=vtable |
11 &DATA=vtitle | &DATA=vview | &DATA=vsacces | &DATA=vscatlg |
12 &DATA=vslib | &DATA=vstable | &DATA=vstabvw | &DATA=vsview %THEN 1;
13 %ELSE 0;
14%END;
15%ELSE %IF &lib=db %THEN 1;
16%ELSE %DO;
17 %local suffix1 suffix2;
18 %let suffix1=%_suffix;
19 %let suffix2=%scan(&suffix1, 3, %str( ));
20 %let suffix1=%scan(&suffix1, 1, %str( ));
21 %let DATA=%_dir(%sysfunc(pathname(&lib)))&DATA;
22
23 %IF %_exist(&DATA..&suffix1) %THEN 1;
24 %ELSE %IF %LENGTH(&suffix2) & %_exist(&DATA..&suffix2) %THEN 1;
25 %ELSE 0;
26%END;
27 
28%mend _dsexist;
2 Codeblock
DATA STEP Data
Erklärung :
Teil des Validierungsflusses (auskommentiert). Dieser Block weist zuerst die Bibliothek 'PWD' dem aktuellen Verzeichnis zu. Anschließend erstellt er ein leeres Dataset in der WORK-Bibliothek (automatisch benannt als data1, data2 usw.) und ein weiteres leeres Dataset namens 'test2' in der 'PWD'-Bibliothek.
Kopiert!
1/* uncomment to re-validate
2 
3LIBNAME pwd '.';
4 
5DATA;
6RUN;
7 
8DATA pwd.test2;
9RUN;
3 Codeblock
MACRO CALL
Erklärung :
Teil des Validierungsflusses (auskommentiert). Dieser Block führt eine Reihe von Tests durch, indem er das Makro %_dsexist mit verschiedenen Eingabetypen (Null-Dataset, existierend, nicht existierend, in SASHELP usw.) aufruft, um zu überprüfen, ob das zurückgegebene Ergebnis korrekt ist. Die Ergebnisse werden über %PUT im SAS-Journal angezeigt.
Kopiert!
1%put ATTN: %_dsexist(_null_);
2%put ATTN: %_dsexist(data1);
3%put ATTN: %_dsexist(sashelp.voption);
4%put ATTN: %_dsexist(sashelp.voption(obs=1.));
5%put ATTN: %_dsexist(sashelp.option);
6%put ATTN: %_dsexist(work.data1);
7%put ATTN: %_dsexist(work.data2);
8%put ATTN: %_dsexist(pwd.test1);
9%put ATTN: %_dsexist(pwd.test2);
10%put ATTN: %_exist(test2.s*);
4 Codeblock
MACRO CALL
Erklärung :
Letzter Schritt des Validierungsflusses (auskommentiert). Dieser Aufruf eines (nicht bereitgestellten) Makros %_delete dient dazu, die Testumgebung zu bereinigen, indem das zuvor erstellte Dataset 'pwd.test2' gelöscht wird.
Kopiert!
1%_delete(DATA=pwd.test2);
2 
3*/
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-2025 Rodney Sparapani