Esta macro, llamada comma2andmac, está diseñada para modificar una cadena de caracteres reemplazando específicamente la última ocurrencia de la secuencia 'coma-espacio' por ' and '. Utiliza la función %sysfunc con la expresión regular PRXCHANGE para realizar esta sustitución. Acepta un único parámetro posicional 'str' que es la cadena de entrada a modificar. El uso típico es `%let newstr=%comma2andmac(&oldstr);`. La macro se implementa como una macro funcional y utiliza `parmbuff` para acceder al parámetro pasado.
Análisis de datos
Type : CREACION_INTERNA
La macro opera sobre una cadena de caracteres proporcionada como parámetro al ser llamada. Ninguna fuente de datos externa (archivos, bases de datos) o interna a SAS (SASHELP) es leída o manipulada directamente por esta macro. Procesa datos completamente pasados o generados internamente.
1 Bloque de código
MACRO
Explicación : Este bloque define la macro funcional 'comma2andmac'.
- `%put MACRO CALLED...`: Muestra un mensaje de depuración indicando que la macro ha sido llamada.
- `%macro comma2andmac / parmbuff;`: Declara la macro 'comma2andmac' y utiliza la opción `parmbuff` para acceder directamente al contenido completo de la llamada a la macro a través de `&syspbuff`.
- `%if %length(&syspbuff) GT 2 %then %do;`: Verifica si se ha proporcionado un parámetro (la longitud debe ser mayor que 2 para excluir los paréntesis vacíos).
- `%local buff;`: Declara una variable macro local 'buff'.
- `%let buff=%qsubstr(&syspbuff,2,%length(&syspbuff)-2);`: Extrae la cadena de caracteres pasada como parámetro, eliminando los paréntesis inicial y final. Se utiliza `%qsubstr` para preservar los caracteres especiales.
- `%unquote(%sysfunc(prxchange(s/^(.*)(%str(, ))(.*$)/$1 and $3/,1,&buff)))`: Este es el núcleo de la lógica.
- `%sysfunc(prxchange(...))`: Llama a la función SAS Perl Regular Expression Change.
- `s/^(.*)(%str(, ))(.*$)/$1 and $3/,1,&buff`: La expresión regular busca el último ', ' en la cadena.
- `^(.*)`: Captura todo desde el inicio de la cadena (Grupo 1).
- `(%str(, ))`: Captura literalmente ', ' (coma espacio) (Grupo 2). Se utiliza `%str` para evitar la interpretación de caracteres especiales por parte de la macro.
- `(.*$)`: Captura todo hasta el final de la cadena (Grupo 3).
- El reemplazo es `$1 and $3`, lo que significa 'todo antes de la última , ' + ' and ' + 'todo después de la última , '.
- `,1`: Indica que la sustitución debe ocurrir solo una vez.
- `&buff`: La cadena sobre la cual operar.
- `%unquote()`: Elimina todas las protecciones de comillas que podrían ser añadidas por `%sysfunc` o `%qsubstr`.
%unquote(%sysfunc(prxchange(s/^(.*)(%str(, ))(.*$)/$1 and $3/,1,&buff)))
8
%END;
9
%mend comma2andmac;
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 : This is public domain software. No guarantee as to suitability or accuracy is given or implied. User uses this code entirely at their own risk.
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.