Veröffentlicht am :
Makro INTERNE_ERZEUGUNG

Options-Modifikatoren aus einem Dataset-Namen entfernen

Dieser Code ist auch verfügbar auf: English Español Français
Dieses Makro, `dropmodifmac`, nimmt als Eingabe eine Zeichenkette entgegen, die einen oder mehrere SAS© Dataset-Namen enthält, denen potenziell Modifikatoren in Klammern folgen können (wie `(where=...)` oder `(drop=...)`). Sein Ziel ist es, die Zeichenkette nur mit den Dataset-Namen zurückzugeben, ohne die Modifikatoren. Es ist darauf ausgelegt, Klammern, die innerhalb von Zeichenketten (einfache oder doppelte Anführungszeichen) innerhalb der Modifikatoren vorhanden sind, korrekt zu handhaben, um deren versehentliches Löschen zu vermeiden. Das Makro verwendet reguläre Ausdrücke (über die Funktion `prxchange`) und eine Schleife, um die Blöcke in Klammern iterativ von außen nach innen zu entfernen.
Datenanalyse

Type : INTERNE_ERZEUGUNG


Das Makro verarbeitet keine Datensätze. Es operiert auf einer Zeichenkette, die ihm als Parameter übergeben wird. Die 'Datenquelle' ist daher intern zum Makroaufruf.

1 Codeblock
MACRO
Erklärung :
Dieser Block definiert das Makro `dropmodifmac`, das einen Zeichenkettenparameter `str` akzeptiert. Eine lokale Makrovariable `tempstr` wird deklariert. Die Verarbeitung beginnt damit, doppelt und dann einfach zitierte Zeichenketten zu neutralisieren, indem sie durch ein spezielles Zeichen ersetzt werden, um zu vermeiden, dass eventuelle Klammern darin versehentlich verarbeitet werden. Anschließend wird eine `%do %while`-Schleife ausgeführt, solange eine öffnende Klammer in der Zeichenkette erkannt wird. In jeder Iteration wird die Funktion `prxchange` mit einem regulären Ausdruck verwendet, um das innerste Klammerpaar `()` und seinen Inhalt zu finden und zu entfernen. Die Schleife wiederholt sich, bis alle Klammerpaare eliminiert wurden. Schließlich gibt das Makro die bereinigte Zeichenkette `tempstr` zurück.
Kopiert!
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;
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.