Todos los datos utilizados son generados dinámicamente e internamente por el script. Se trata principalmente de archivos de texto temporales creados en la biblioteca SAS WORK para simular escenarios de reemplazo de texto. No se requiere ningún dato de SASHELP o de fuentes externas no gestionadas para la ejecución de estas pruebas.
1 Bloque de código
Macro Condicional
Explicación : Este bloque de código realiza una verificación del entorno de ejecución. Prueba si la versión de SAS es 'V.04', correspondiente a SAS Viya 4. Si es así, se muestra un mensaje de error en el registro SAS y la ejecución de la macro se interrumpe. Esto indica una incompatibilidad de la biblioteca IO Lua, esencial para `mp_gsubfile`, con SAS Viya 4 en este momento.
¡Copiado!
%if "%substr(&sysver.XX,1,4)"="V.04" %then %do;
%put %str(ERR)OR: Viya 4 does not support the IO library in lua;
%return;
%end;
1
%IF"%substr(&sysver.XX,1,4)"="V.04" %THEN %DO;
2
%put %str(ERR)OR: Viya 4 does not support the IO library in lua;
3
%return;
4
%END;
2 Bloque de código
DATA STEP Data
Explicación : Este bloque prepara el primer escenario de prueba. Declara una variable macro global `str1`, define la ruta de un archivo temporal `file.txt` en la biblioteca `WORK` a través de `pathname(work)`, e inicializa los patrones de búsqueda (`pat`) y reemplazo (`str`). Se utiliza un `DATA STEP _null_` para crear el archivo `file.txt` y escribir la cadena inicial 'replace/me', que será el objetivo del reemplazo.
¡Copiado!
%global str1;
%let file=%sysfunc(pathname(work))/file.txt;
%let pat=replace/me;
%let str=with/this;
data _null_;
file "&file";
put "&pat";
run;
1
%global str1;
2
%let file=%sysfunc(pathname(work))/file.txt;
3
%let pat=replace/me;
4
%let str=with/this;
5
DATA _null_;
6
file "&file";
7
put "&pat";
8
RUN;
3 Bloque de código
Macro Appel
Explicación : En este bloque, se llama a la macro `mp_gsubfile` para realizar el reemplazo del patrón `&pat` por `&str` en el archivo `&file`. Luego, un `DATA STEP _null_` relee el contenido modificado de `&file`, y la primera línea se almacena en la variable macro `str1`. Finalmente, se utiliza la macro `mp_assert` para verificar que el reemplazo se ha realizado correctamente comparando `&str1` con el valor esperado `&str`. El resultado de la aserción se registra en el conjunto de datos `work.test_results`.
¡Copiado!
%mp_gsubfile(file=&file, patternvar=pat, replacevar=str)
data _null_;
infile "&file";
input;
call symputx('str1',_infile_);
run;
%mp_assert(
iftrue=("&str1"="&str"),
desc=Check that simple replacement was successful,
outds=work.test_results
)
desc=Check that SIMPLE replacement was successful,
11
outds=work.test_results
12
)
4 Bloque de código
DATA STEP Data
Explicación : Este bloque prepara el segundo escenario de prueba, centrado en el reemplazo multi-línea. Inicializa nuevas variables macros globales (`str2`, `strcheck2`, `strcheck2b`), define un segundo archivo temporal `file2.txt` y sus patrones de búsqueda (`pat2`) y reemplazo (`str2`). Un `DATA STEP _null_` crea `file2.txt` y escribe en él tres líneas: 'line1' seguida de dos ocurrencias de 'replace/me', simulando un archivo con múltiples objetivos de reemplazo.
¡Copiado!
%global str2 strcheck2 strcheck2b;
%let file2=%sysfunc(pathname(work))/file2.txt;
%let pat2=replace/me;
%let str2=with/this;
data _null_;
file "&file2";
put 'line1';output;
put "&pat2";output;
put "&pat2";output;
run;
1
%global str2 strcheck2 strcheck2b;
2
%let file2=%sysfunc(pathname(work))/file2.txt;
3
%let pat2=replace/me;
4
%let str2=with/this;
5
DATA _null_;
6
file "&file2";
7
put 'line1';OUTPUT;
8
put "&pat2";OUTPUT;
9
put "&pat2";OUTPUT;
10
RUN;
5 Bloque de código
Macro Appel
Explicación : En este bloque, se llama a la macro `mp_gsubfile` para reemplazar los patrones en `&file2`. Luego, un `DATA STEP _null_` lee el contenido modificado de `&file2`. Las líneas específicas (2 y 3) donde se esperaban los reemplazos se extraen y se almacenan en las variables macros `strcheck2` y `strcheck2b`. Se realizan dos llamadas a la macro `mp_assert` para verificar independientemente si los reemplazos en estas líneas tuvieron éxito, validando así la capacidad multi-línea de `mp_gsubfile`. Los resultados se agregan a `work.test_results`.
¡Copiado!
%mp_gsubfile(file=&file2, patternvar=pat2, replacevar=str2)
data _null_;
infile "&file2";
input;
if _n_=2 then call symputx('strcheck2',_infile_);
if _n_=3 then call symputx('strcheck2b',_infile_);
putlog _infile_;
run;
%mp_assert(
iftrue=("&strcheck2"="&str2"),
desc=Check that multi line replacement was successful (line2),
outds=work.test_results
)
%mp_assert(
iftrue=("&strcheck2b"="&str2"),
desc=Check that multi line replacement was successful (line3),
outds=work.test_results
)
desc=Check that multi line replacement was successful (line2),
13
outds=work.test_results
14
)
15
%mp_assert(
16
iftrue=("&strcheck2b"="&str2"),
17
desc=Check that multi line replacement was successful (line3),
18
outds=work.test_results
19
)
6 Bloque de código
Macro Appel
¡Copiado!
%gsubtest()
1
%gsubtest()
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.