Esta macro permite verificar la existencia de un archivo `.sashdat` en una CASLIB. Utiliza la acción CAS `table.fileinfo` ejecutada a través de `dosubl()` para recuperar la lista de archivos. Para optimizar el rendimiento en llamadas múltiples, el resultado se almacena en caché en una tabla WORK local (definida por `outprefix`). La macro devuelve 1 si el archivo existe, 0 si no.
Análisis de datos
Type : EXTERNE
Los datos provienen de la información del sistema del servidor CAS (lista de archivos en una CASLIB) recuperados a través de `PROC CAS`.
1 Bloque de código
PROC CAS Data
Explicación : Este bloque condicional verifica si el caché existe. Si no, utiliza `dosubl` para ejecutar `PROC CAS` y la acción `table.fileinfo` para listar los archivos de la librería, luego un paso DATA para filtrar solo los archivos `.sashdat` y crear la tabla de caché.
¡Copiado!
%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 Bloque de código
SAS Functions
Explicación : Este bloque consulta la tabla de caché local a través de las funciones `open` y `fetch` para verificar si el nombre de la tabla solicitada (`&ds`) está presente, y devuelve el resultado booleano (1 o 0).
¡Copiado!
/* 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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.