Publicado el :
Macro CREATION_INTERNE

Eliminar modificadores de opciones de un nombre de dataset

Este código también está disponible en: Deutsch English Français
Esta macro, `dropmodifmac`, toma como entrada una cadena de caracteres que contiene uno o varios nombres de datasets SAS©, potencialmente seguidos de modificadores entre paréntesis (como `(where=...)` o `(drop=...)`). Su objetivo es devolver la cadena de caracteres con solo los nombres de los datasets, sin los modificadores. Está diseñada para manejar correctamente los paréntesis presentes dentro de cadenas de caracteres (comillas simples o dobles) dentro de los modificadores, para evitar eliminarlos por error. La macro utiliza expresiones regulares (a través de la función `prxchange`) y un bucle para eliminar iterativamente los bloques entre paréntesis de afuera hacia adentro.
Análisis de datos

Type : CREATION_INTERNE


La macro no procesa ningún conjunto de datos. Opera sobre una cadena de caracteres que se le proporciona como parámetro. La fuente de 'datos' es, por lo tanto, interna a la llamada de la macro.

1 Bloque de código
MACRO
Explicación :
Este bloque define la macro `dropmodifmac` que acepta un parámetro de cadena de caracteres `str`. Se declara una variable macro local `tempstr`. El procesamiento comienza neutralizando las cadenas de caracteres entre comillas dobles y luego simples, reemplazándolas por un carácter especial, para evitar que posibles paréntesis internos sean tratados. Luego, un bucle `%do %while` se ejecuta mientras se detecte un paréntesis de apertura en la cadena. En cada iteración, la función `prxchange` se utiliza con una expresión regular para encontrar y eliminar el primer par de paréntesis `()` más interno y su contenido. El bucle se repite hasta que todos los pares de paréntesis hayan sido eliminados. Finalmente, la macro devuelve la cadena `tempstr` limpia.
¡Copiado!
1%put MACRO CALLED: dropmodifmac v1.0;
2 
3%macro dropmodifmac(str);
4 %local tempstr;
5 %*- non-greedy replace stuff in double quotes with "" -;
6 %let tempstr=%sysfunc(prxchange(s!%str(%"-).*?%str(%"-)!""!,-1,
7 %superq(str)));
8 %*- non-greedy replace stuff in single quotes with '' -;
9 %let tempstr=%sysfunc(prxchange(s!%str(%'-).*?%str(%'-)!''!,-1,
10 %superq(tempstr)));
11 %*- repeat until we have no more left round brackets -;
12 %DO %while( %index(%superq(tempstr),%str(%()) );
13 %*- Non-greedy replace stuff inside "( )" that does -;
14 %*- not include a left round bracket with null. -;
15 %let tempstr=%sysfunc(prxchange(s!\%str(%()[^\%str(%()]*?\%str(%))!!,-1,
16 %superq(tempstr)));
17 %END;
18&tempstr
19%mend dropmodifmac;
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.