Publié le :
Macro MIXTE

Suppression de macros du catalogue work.sasmacr par motif SQL

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Cette macro, `delmac`, est conçue pour supprimer les macros SAS© existantes du catalogue `work.sasmacr` en fonction d'un motif SQL 'like' fourni par l'utilisateur. Elle convertit d'abord le motif 'like' en majuscules et remplace les deux-points (':') par des signes de pourcentage ('%') pour la compatibilité avec les caractères génériques SQL. Ensuite, elle liste toutes les macros du catalogue `work.sasmacr` dans un jeu de données temporaire nommé `_listmac`. Une étape `PROC SQL` filtre ce jeu de données pour identifier les macros correspondant au motif et stocke leurs noms dans une variable macro `delmac`. Le jeu de données temporaire `_listmac` est ensuite supprimé. Enfin, si des macros ont été identifiées, `PROC CATALOG` est utilisé pour les supprimer de `work.sasmacr`. La macro inclut une gestion d'erreur basique pour un paramètre 'like' vide et restaure l'option `notes` à son état original. Le motif 'like' supporte les caractères génériques SQL '_' (tout caractère) et '%' (toute chaîne), avec '\' utilisé pour échapper '_'.
Analyse des données

Type : MIXTE


Le code opère sur le catalogue `work.sasmacr` de la session SAS courante, qui contient les macros compilées. Il crée un jeu de données temporaire `_listmac` dans la bibliothèque `WORK` pour stocker la liste des macros avant de les filtrer avec `PROC SQL`. Aucune donnée externe n'est lue ou requise pour son fonctionnement.

1 Bloc de code
MACRO DEFINITION
Explication :
Ce bloc définit la macro `delmac` avec un paramètre `like`. Il initialise des variables locales, capture l'état actuel de l'option `notes` de SAS et la désactive pour la durée de la macro. Il effectue également une validation du paramètre `like` et le pré-traite pour la recherche SQL en le passant en majuscules et en remplaçant les ':' par '%'.
Copié !
1%put MACRO CALLED: delmac v1.0;
2 
3%macro delmac(like);
4 %local delmac err savopts;
5 
6 %let err=ERR%str(OR);
7 %let savopts=%sysfunc(getoption(notes));
8 
9 options nonotes;
10 
11 %IF not %LENGTH(&like) %THEN %goto exit;
12 
13 %let like=%upcase(%sysfunc(translate(&like,%,:)));
2 Bloc de code
PROC CATALOG Data
Explication :
Ce bloc utilise `PROC CATALOG` pour lister toutes les entrées de type 'macro' du catalogue `work.sasmacr` et les écrit dans un jeu de données temporaire nommé `_listmac`.
Copié !
1 
2PROC CATALOG catalog=work.sasmacr entrytype=macro;
3contents out=_listmac;
4 
5QUIT;
6 
3 Bloc de code
PROC SQL
Explication :
Ce bloc `PROC SQL` sélectionne les noms de macros du jeu de données temporaire `_listmac` qui correspondent au motif fourni par le paramètre `like`. Les noms de macros trouvés sont concaténés dans la variable macro `delmac`, séparés par des espaces. L'option `escape '\'` permet d'utiliser le caractère '\' pour échapper les caractères génériques SQL ('_').
Copié !
1 PROC SQL noprint;
2 select name into :delmac separated BY " " from _listmac
3 where name like "&like" escape '\';
4 QUIT;
4 Bloc de code
PROC DATASETS
Explication :
Ce bloc utilise `PROC DATASETS` pour supprimer le jeu de données temporaire `_listmac`, qui n'est plus nécessaire après l'extraction des noms de macros.
Copié !
1 
2PROC DATASETS nolist;
3delete _listmac;
4 
5QUIT;
6 
5 Bloc de code
PROC CATALOG
Explication :
Ce bloc conditionnel vérifie si la variable macro `delmac` contient des noms de macros (c'est-à-dire si des macros correspondant au motif ont été trouvées). Si c'est le cas, `PROC CATALOG` est utilisé pour supprimer ces macros du catalogue `work.sasmacr`.
Copié !
1 %IF %LENGTH(&delmac) %THEN %DO;
2 PROC CATALOG catalog=work.sasmacr entrytype=macro;
3 delete &delmac;
4 QUIT;
5 %END;
6 Bloc de code
MACRO LOGIC
Explication :
Ce bloc gère la logique de sortie de la macro. Il inclut une étiquette `%exit:` pour la gestion des erreurs (si aucun motif 'like' n'est fourni) et une étiquette `%skip:` pour la fin normale de l'exécution. Enfin, il restaure l'option SAS `notes` à sa valeur d'origine, assurant que la macro n'affecte pas durablement l'environnement SAS.
Copié !
1 %goto skip;
2 %exit: %put &err: (delmac) No "like" string supplied;
3 %skip:
4 
5 options &savopts;
6 
7%mend delmac;
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.