Publicado el :
Macro CREATION_INTERNE

Macro para verificar la existencia de un dataset

Este código también está disponible en: Français Deutsch English
En espera de validación
El objetivo de esta macro es proporcionar un método fiable para probar la existencia de un dataset SAS©. Acepta el nombre del dataset como parámetro posicional. La lógica interna primero aísla la librería y el nombre del miembro. Se aplica un tratamiento especial para la librería SASHELP donde solo una lista predefinida de vistas del diccionario se considera existente. Para una librería específicamente llamada 'DB', la macro devuelve sistemáticamente 1 (verdadero), actuando como una solución alternativa para datasets virtuales. Para todos los demás casos, construye la ruta física y utiliza funciones y macros (%sysfunc(pathname), %_exist) para verificar la presencia del archivo en el sistema, probando los posibles sufijos de archivo SAS© (por ejemplo: .sas©7bdat, .sastbvw).
Análisis de datos

Type : CREATION_INTERNE


La macro en sí misma no lee ni crea datos, sino que verifica su existencia. El bloque de validación, proporcionado en comentario, crea datasets de prueba temporales (`WORK.DATA_n`, `PWD.TEST2`) para verificar el correcto funcionamiento de la macro.

1 Bloque de código
MACRO
Explicación :
Definición de la macro _dsexist. Toma como argumento un nombre de dataset. Extrae la librería y el nombre de la tabla, luego aplica una lógica condicional: un tratamiento específico para las vistas del diccionario de la librería SASHELP, un valor de retorno fijo para una librería 'DB', y una verificación de la existencia del archivo físico para todas las demás librerías.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Parte del flujo de validación (en comentario). Este bloque asigna primero la librería 'PWD' al directorio actual. Luego, crea un dataset vacío en la librería WORK (nombrado automáticamente data1, data2, etc.) y otro dataset vacío llamado 'test2' en la librería 'PWD'.
¡Copiado!
1/* uncomment to re-validate
2 
3LIBNAME pwd '.';
4 
5DATA;
6RUN;
7 
8DATA pwd.test2;
9RUN;
3 Bloque de código
MACRO CALL
Explicación :
Parte del flujo de validación (en comentario). Este bloque ejecuta una serie de pruebas llamando a la macro %_dsexist con diferentes tipos de entradas (dataset nulo, existente, inexistente, en SASHELP, etc.) para verificar que el resultado devuelto sea correcto. Los resultados se muestran en el log de SAS a través de %PUT.
¡Copiado!
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 Bloque de código
MACRO CALL
Explicación :
Última etapa del flujo de validación (en comentario). Esta llamada a una macro (no proporcionada) %_delete está destinada a limpiar el entorno de prueba eliminando el dataset 'pwd.test2' creado previamente.
¡Copiado!
1%_delete(DATA=pwd.test2);
2 
3*/
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.
Información de copyright : Copyright (c) 2001-2025 Rodney Sparapani