Dieses Makro prüft die Existenz einer `.sashdat`-Datei in einer CASLIB. Es verwendet die CAS-Aktion `table.fileinfo`, die über `dosubl()` ausgeführt wird, um die Dateiliste abzurufen. Um die Leistung bei mehreren Aufrufen zu optimieren, wird das Ergebnis in einer lokalen WORK-Tabelle (definiert durch `outprefix`) zwischengespeichert. Das Makro gibt 1 zurück, wenn die Datei existiert, sonst 0.
Datenanalyse
Type : EXTERNE
Die Daten stammen aus den Systeminformationen des CAS-Servers (Dateiliste in einer CASLIB), die über `PROC CAS` abgerufen werden.
1 Codeblock
PROC CAS Data
Erklärung : Dieser bedingte Block prüft, ob der Cache existiert. Andernfalls wird `dosubl` verwendet, um `PROC CAS` und die Aktion `table.fileinfo` auszuführen, um die Dateien der Bibliothek aufzulisten, gefolgt von einem DATA-Schritt, um nur `.sashdat`-Dateien zu filtern und die Cache-Tabelle zu erstellen.
Kopiert!
%if %sysfunc(exist(&outprefix._&lib)) ne 1 %then %do;
%let rc=%sysfunc(dosubl(%nrstr(
/* Read in table list (once per &lib per session) */
proc cas;
table.fileinfo result=source_list /caslib="&lib";
val=findtable(source_list);
saveresult val dataout=&outprefix._&lib;
quit;
/* Only keep name, without file extension */
data &outprefix._&lib;
set &outprefix._&lib(where=(Name like '%.sashdat') keep=Name);
Name=upcase(scan(Name,1,'.'));
run;
)));
%end;
1
%IF %sysfunc(exist(&outprefix._&lib)) ne 1 %THEN %DO;
2
%let rc=%sysfunc(dosubl(%nrstr(
3
/* Read in table list (once per &lib per session) */
4
PROC CAS;
5
TABLE.fileinfo RESULT=source_list /caslib="&lib";
6
val=findtable(source_list);
7
saveresult val dataout=&outprefix._&lib;
8
QUIT;
9
/* Only keep name, without file extension */
10
DATA &outprefix._&lib;
11
SET &outprefix._&lib(where=(Name like '%.sashdat') keep=Name);
12
Name=upcase(scan(Name,1,'.'));
13
RUN;
14
)));
15
%END;
2 Codeblock
SAS Functions
Erklärung : Dieser Block fragt die lokale Cache-Tabelle über die Funktionen `open` und `fetch` ab, um zu prüfen, ob der angeforderte Tabellenname (`&ds`) vorhanden ist, und gibt das boolesche Ergebnis (1 oder 0) zurück.
Kopiert!
/* Scan table for hdat existence */
%let dsid=%sysfunc(open(&outprefix._&lib(where=(name="&ds"))));
%syscall set(dsid);
%let rc = %sysfunc(fetch(&dsid));
%let rc = %sysfunc(close(&dsid));
/* Return result */
%if "%trim(&name)"="%trim(&ds)" %then 1;
%else 0;
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.
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.