Makro zum Extrahieren einzigartiger Wörter zwischen zwei Zeichenketten

Dieser Code ist auch verfügbar auf: English Español Français
Schwierigkeitsgrad
Anfänger
Veröffentlicht am :
Das Makro `%mf_wordsInStr1ButNotStr2` wurde entwickelt, um einzigartige Wörter zu identifizieren und zu extrahieren. Es akzeptiert zwei Hauptparameter, `Str1` und `Str2`, beides Zeichenketten, die durch Leerzeichen getrennte Wörter enthalten. Eine erste Überprüfung stellt sicher, dass die Eingabezeichenketten nicht leer sind; falls doch, zeigt das Makro eine Informationsmeldung an und beendet sich vorzeitig.
Lokale Variablen (`count_base`, `count_extr`, `i`, `i2`, `extr_word`, `base_word`, `match`, `outvar`) werden deklariert, um Interferenzen mit globalen Makrovariablen zu vermeiden. Die Makrofunktionen `%sysfunc(countw(...))` werden verwendet, um die Anzahl der Wörter in jeder Zeichenkette zu bestimmen, die in `count_extr` für `Str1` und `count_base` für `Str2` gespeichert werden.
Der Kern der Logik ist eine doppelt verschachtelte Schleife. Die äußere Schleife (`%do i=1 %to &count_extr;`) iteriert über jedes Wort von `Str1`, extrahiert durch `%scan(&Str1,&i,%str( ))`. Für jedes extrahierte Wort (`extr_word`) wird eine Variable `match` auf 0 initialisiert. Die innere Schleife (`%do i2=1 %to &count_base;`) durchläuft dann jedes Wort von `Str2`, das auf ähnliche Weise extrahiert wird (`base_word`). Wenn `extr_word` mit `base_word` übereinstimmt, wird `match` auf 1 gesetzt.
Nach dem Ende der inneren Schleife, wenn die Variable `match` immer noch 0 ist (was anzeigt, dass in `Str2` kein übereinstimmendes Wort gefunden wurde), wird `extr_word` zur Makrovariable `outvar` hinzugefügt, die die einzigartigen Wörter sammelt. Schließlich gibt das Makro den Inhalt von `outvar` aus, wodurch die Wörter von `Str1` angezeigt werden, die nicht in `Str2` vorhanden waren.
Datenanalyse

Type : CREATION_INTERNE


Das Makro `%mf_wordsInStr1ButNotStr2` verarbeitet ausschließlich Zeichenketten, die ihm als Argumente (`Str1` und `Str2`) übergeben werden. Es gibt keinen direkten Zugriff auf vorhandene SAS-Datasets (einschließlich SASHELP) oder externe Dateien für seine Hauptoperationen. Die verarbeiteten 'Daten' sind somit Textwerte, die dynamisch beim Aufruf des Makros bereitgestellt werden und keine externen oder internen vordefinierten Datenquellen erfordern.

1 Codeblock
MACRO
Erklärung :
Dieser Block definiert das SAS-Makro `%mf_wordsInStr1ButNotStr2`. Es verwendet lokale Variablen, um seine Funktion zu kapseln. Die Logik beginnt mit einer Überprüfung der Eingabezeichenketten, um sicherzustellen, dass sie nicht leer sind, gefolgt von der Berechnung der Wortanzahl in jeder Zeichenkette über `%sysfunc(countw())`. Verschachtelte Schleifen durchlaufen die Wörter der beiden Zeichenketten mithilfe der Funktion `%scan()`. Das aktuelle Wort von `Str1` (`extr_word`) wird mit jedem Wort von `Str2` (`base_word`) verglichen. Wenn `extr_word` in `Str2` nicht gefunden wird, wird es der Makrovariable `outvar` hinzugefügt. Schließlich gibt das Makro den Inhalt von `outvar` aus, wodurch die Liste der einzigartigen Wörter bereitgestellt wird, die in `Str1` vorhanden, aber in `Str2` nicht vorhanden sind. Diese Implementierung ist rein makrobasiert und generiert keine zwischengeschalteten SAS-Datasets.
Kopiert!
1%macro mf_wordsInStr1ButNotStr2(
2 Str1= /* string containing words to extract */
3 ,Str2= /* used to compare with the extract string */
4)/*/STORE SOURCE*/;
5 
6%local count_base count_extr i i2 extr_word base_word match outvar;
7%IF %LENGTH(&str1)=0 or %LENGTH(&str2)=0 %THEN %DO;
8 %put base string (str1)= &str1;
9 %put compare string (str2) = &str2;
10 %return;
11%END;
12%let count_base=%sysfunc(countw(&Str2));
13%let count_extr=%sysfunc(countw(&Str1));
14 
15%DO i=1 %to &count_extr;
16 %let extr_word=%scan(&Str1,&i,%str( ));
17 %let match=0;
18 %DO i2=1 %to &count_base;
19 %let base_word=%scan(&Str2,&i2,%str( ));
20 %IF &extr_word=&base_word %THEN %let match=1;
21 %END;
22 %IF &match=0 %THEN %let outvar=&outvar &extr_word;
23%END;
24 
25 &outvar
26 
27%mend mf_wordsInStr1ButNotStr2;
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 : Die Copyright-Informationen werden aus dem Hilfebereich des Hauptmakros und den referenzierten Dateien zusammengestellt: 'Allan Bowe' (Autor oder Mitwirkender, erwähnt in der Haupthilfe). Zusätzliche Copyrights der referenzierten Dateien: 'Copyright (c) 2001-2006 Rodney Sparapani' (aus der Datei `_version.sas`, unter GNU General Public License), 'Copyright 2010-2023 HMS Analytical Software GmbH' (aus der Datei `macro_without_brief_tag.sas`), 'Copyright © 2022, SAS Institute Inc.' (aus der Datei `print_macro_parameters.sas`, unter Apache-2.0 Lizenz) und 'Originalcode von ChrisNZ' (aus der Datei `datastep_infile_trick.json`, unter Apache-2.0 Lizenz). Auszüge aus der SAS Viya-Dokumentation sind ebenfalls in den Referenzen enthalten.


Zugehörige Dokumentation

Aucune documentation spécifique pour cette catégorie.