Publié le :
Macro CREATION_INTERNE

Supprimer les modificateurs d'options d'un nom de dataset

Ce code est également disponible en : Deutsch English Español
Cette macro, `dropmodifmac`, prend en entrée une chaîne de caractères contenant un ou plusieurs noms de datasets SAS©, potentiellement suivis de modificateurs entre parenthèses (comme `(where=...)` ou `(drop=...)`). Son objectif est de retourner la chaîne de caractères avec uniquement les noms des datasets, sans les modificateurs. Elle est conçue pour gérer correctement les parenthèses présentes à l'intérieur de chaînes de caractères (guillemets simples ou doubles) au sein des modificateurs, afin d'éviter de les supprimer par erreur. La macro utilise des expressions régulières (via la fonction `prxchange`) et une boucle pour supprimer itérativement les blocs entre parenthèses de l'extérieur vers l'intérieur.
Analyse des données

Type : CREATION_INTERNE


La macro ne traite aucun jeu de données. Elle opère sur une chaîne de caractères qui lui est fournie en paramètre. La source de 'données' est donc interne à l'appel de la macro.

1 Bloc de code
MACRO
Explication :
Ce bloc définit la macro `dropmodifmac` qui accepte un paramètre de chaîne de caractères `str`. Une variable macro locale `tempstr` est déclarée. Le traitement commence par neutraliser les chaînes de caractères entre guillemets doubles puis simples en les remplaçant par un caractère spécial, pour éviter que d'éventuelles parenthèses à l'intérieur ne soient traitées. Ensuite, une boucle `%do %while` s'exécute tant qu'une parenthèse ouvrante est détectée dans la chaîne. À chaque itération, la fonction `prxchange` est utilisée avec une expression régulière pour trouver et supprimer la première paire de parenthèses `()` la plus interne et son contenu. La boucle se répète jusqu'à ce que toutes les paires de parenthèses aient été éliminées. Finalement, la macro retourne la chaîne `tempstr` nettoyée.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations 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.