Veröffentlicht am :
Makro CREATION_INTERNE

Makro: comma2andmac

Dieser Code ist auch verfügbar auf: English Español Français
Dieses Makro mit dem Namen comma2andmac wurde entwickelt, um eine Zeichenkette zu ändern, indem das letzte Vorkommen der Sequenz 'Komma-Leerzeichen' spezifisch durch ' and ' ersetzt wird. Es verwendet die Funktion %sysfunc mit dem regulären Ausdruck PRXCHANGE, um diese Substitution durchzuführen. Es nimmt einen einzigen Positionsparameter 'str' entgegen, der die zu ändernde Eingabezeichenkette ist. Die typische Verwendung ist `%let newstr=%comma2andmac(&oldstr);`. Das Makro ist als Funktionsmakro implementiert und verwendet `parmbuff`, um auf den übergebenen Parameter zuzugreifen.
Datenanalyse

Type : CREATION_INTERNE


Das Makro arbeitet mit einer Zeichenkette, die beim Aufruf als Parameter übergeben wird. Keine externen Datenquellen (Dateien, Datenbanken) oder interne SAS-Quellen (SASHELP) werden direkt von diesem Makro gelesen oder manipuliert. Es verarbeitet Daten, die vollständig intern übergeben oder generiert werden.

1 Codeblock
MACRO
Erklärung :
Dieser Block definiert das Funktionsmakro 'comma2andmac'.
- `%put MACRO CALLED...`: Zeigt eine Debug-Nachricht an, die angibt, dass das Makro aufgerufen wurde.
- `%macro comma2andmac / parmbuff;`: Deklariert das Makro 'comma2andmac' und verwendet die Option `parmbuff`, um über `&syspbuff` direkt auf den vollständigen Inhalt des Makroaufrufs zuzugreifen.
- `%if %length(&syspbuff) GT 2 %then %do;`: Überprüft, ob ein Parameter angegeben wurde (die Länge muss größer als 2 sein, um leere Klammern auszuschließen).
- `%local buff;`: Deklariert eine lokale Makrovariable 'buff'.
- `%let buff=%qsubstr(&syspbuff,2,%length(&syspbuff)-2);`: Extrahiert die als Parameter übergebene Zeichenkette, indem die öffnenden und schließenden Klammern entfernt werden. `%qsubstr` wird verwendet, um Sonderzeichen zu erhalten.
- `%unquote(%sysfunc(prxchange(...)))`: Dies ist der Kern der Logik.
- `%sysfunc(prxchange(...))`: Ruft die SAS Perl Regular Expression Change Funktion auf.
- `s/^(.*)(%str(, ))(.*$)/$1 and $3/,1,&buff`: Der reguläre Ausdruck sucht das letzte ', ' in der Zeichenkette.
- `^(.*)`: Erfasst alles vom Anfang der Zeichenkette (Gruppe 1).
- `(%str(, ))`: Erfasst wörtlich ', ' (Komma Leerzeichen) (Gruppe 2). `%str` wird verwendet, um die Makrointerpretation von Sonderzeichen zu vermeiden.
- `(.*$)`: Erfasst alles bis zum Ende der Zeichenkette (Gruppe 3).
- Die Ersetzung ist `$1 and $3`, was 'alles vor dem letzten , ' + ' and ' + 'alles nach dem letzten , ' bedeutet.
- `,1`: Zeigt an, dass die Substitution nur einmal erfolgen soll.
- `&buff`: Die Zeichenkette, auf der operiert werden soll.
- `%unquote()`: Entfernt alle Anführungszeichenschutz, die von `%sysfunc` oder `%qsubstr` hinzugefügt werden könnten.
Kopiert!
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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : 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.