Publicado el :
Macro CREACION_INTERNA

Macro: comma2andmac

Este código también está disponible en: Deutsch English Français
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`.
¡Copiado!
1%put MACRO CALLED: comma2andmac v1.0;
2 
3%macro comma2andmac / parmbuff;
4 %IF %LENGTH(&syspbuff) GT 2 %THEN %DO;
5 %local buff;
6 %let buff=%qsubstr(&syspbuff,2,%LENGTH(&syspbuff)-2);
7%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.