Cette macro, nommée comma2andmac, est conçue pour modifier une chaîne de caractères en remplaçant spécifiquement la dernière occurrence de la séquence 'virgule-espace' par ' and '. Elle utilise la fonction %sysfunc avec l'expression régulière PRXCHANGE pour effectuer cette substitution. Elle prend un seul paramètre positionnel 'str' qui est la chaîne d'entrée à modifier. L'utilisation typique est `%let newstr=%comma2andmac(&oldstr);`. La macro est implémentée en tant que macro fonctionnelle et utilise `parmbuff` pour accéder au paramètre passé.
Analyse des données
Type : CREATION_INTERNE
La macro opère sur une chaîne de caractères fournie en paramètre lors de son appel. Aucune source de données externe (fichiers, bases de données) ou interne à SAS (SASHELP) n'est directement lue ou manipulée par cette macro. Elle traite des données entièrement passées ou générées en interne.
1 Bloc de code
MACRO
Explication : Ce bloc définit la macro fonctionnelle 'comma2andmac'.
- `%put MACRO CALLED...`: Affiche un message de débogage indiquant que la macro a été appelée.
- `%macro comma2andmac / parmbuff;`: Déclare la macro 'comma2andmac' et utilise l'option `parmbuff` pour accéder directement au contenu complet de l'appel macro via `&syspbuff`.
- `%if %length(&syspbuff) GT 2 %then %do;`: Vérifie si un paramètre a été fourni (la longueur doit être supérieure à 2 pour exclure les parenthèses vides).
- `%local buff;`: Déclare une variable macro locale 'buff'.
- `%let buff=%qsubstr(&syspbuff,2,%length(&syspbuff)-2);`: Extrait la chaîne de caractères passée en paramètre, en supprimant les parenthèses de début et de fin. `%qsubstr` est utilisé pour préserver les caractères spéciaux.
- `%unquote(%sysfunc(prxchange(s/^(.*)(%str(, ))(.*$)/$1 and $3/,1,&buff)))`: C'est le cœur de la logique.
- `%sysfunc(prxchange(...))`: Appelle la fonction SAS Perl Regular Expression Change.
- `s/^(.*)(%str(, ))(.*$)/$1 and $3/,1,&buff`: L'expression régulière cherche le dernier ', ' dans la chaîne.
- `^(.*)`: Capture tout du début de la chaîne (Groupe 1).
- `(%str(, ))`: Capture littéralement ', ' (virgule espace) (Groupe 2). `%str` est utilisé pour éviter l'interprétation macro des caractères spéciaux.
- `(.*$)`: Capture tout jusqu'à la fin de la chaîne (Groupe 3).
- Le remplacement est `$1 and $3`, ce qui signifie 'tout avant le dernier , ' + ' and ' + 'tout après le dernier , '.
- `,1`: Indique que la substitution ne doit avoir lieu qu'une seule fois.
- `&buff`: La chaîne sur laquelle opérer.
- `%unquote()`: Supprime toutes les protections de guillemets qui pourraient être ajoutées par `%sysfunc` ou `%qsubstr`.
%unquote(%sysfunc(prxchange(s/^(.*)(%str(, ))(.*$)/$1 and $3/,1,&buff)))
8
%END;
9
%mend comma2andmac;
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.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.