Extraktion gemeinsamer Wörter aus zwei Zeichenketten

Dieser Code ist auch verfügbar auf: English Español Français
Schwierigkeitsgrad
Anfänger
Veröffentlicht am :
Das Makro `mf_wordsInStr1andStr2` akzeptiert zwei Parameter, `Str1` und `Str2`, die Zeichenketten sind. Es vergleicht die Wörter in `Str1` mit denen in `Str2` und erstellt eine neue Zeichenkette, die nur die in beiden Zeichenketten vorhandenen Wörter enthält. Der Vergleich ist Groß- und Kleinschreibungsempfindlich. Wenn eine der Zeichenketten leer ist, zeigt das Makro eine Meldung im Log an und gibt nichts zurück.
Datenanalyse

Type : CREATION_INTERNE


Das Makro verarbeitet Zeichenketten, die als Parameter übergeben werden. Es liest oder schreibt keine traditionellen oder externen SAS-Daten.

1 Codeblock
MACRO
Erklärung :
Definition des Makros `mf_wordsInStr1andStr2` mit seinen Eingabeparametern `Str1` und `Str2`. Deklaration der lokalen Makrovariablen, die für die Wortzählung, Schleifen, die Speicherung extrahierter Wörter und das Endergebnis verwendet werden.
Kopiert!
1%macro mf_wordsInStr1andStr2(
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;
2 Codeblock
MACRO
Erklärung :
Dieser Block überprüft, ob eine der Eingabezeichenketten (`Str1` oder `Str2`) leer ist. Falls dies der Fall ist, wird eine Meldung im SAS-Log angezeigt, die die Werte der Zeichenketten angibt, und das Makro wird (`%return`) ohne Ausgabe beendet.
Kopiert!
1%IF %LENGTH(&str1)=0 or %LENGTH(&str2)=0 %THEN %DO;
2 %put base string (str1)= &str1;
3 %put compare string (str2) = &str2;
4 %return;
5%END;
3 Codeblock
MACRO
Erklärung :
Verwendung der Makrofunktion `%sysfunc(countw(...))` zum Zählen der Wörter in jeder Eingabezeichenkette (`Str1` und `Str2`) und Speicherung dieser Zählungen in den Makrovariablen `count_base` und `count_extr`.
Kopiert!
1%let count_base=%sysfunc(countw(&Str2));
2%let count_extr=%sysfunc(countw(&Str1));
3 
4 Codeblock
MACRO
Erklärung :
Äußere Schleife (`%do i=1 %to &count_extr;`), um jedes Wort in `Str1` zu durchlaufen. Für jedes Wort (`extr_word`) durchläuft eine innere Schleife (`%do i2=1 %to &count_base;`) alle Wörter in `Str2`. Wird eine Übereinstimmung gefunden (`&extr_word=&base_word`), wird die Variable `match` auf 1 gesetzt. Ist `match` nach der inneren Schleife 1, wird das Wort (`extr_word`) zur Makrovariablen `outvar` hinzugefügt, die das Ergebnis sammelt.
Kopiert!
1%DO i=1 %to &count_extr;
2 %let extr_word=%scan(&Str1,&i,%str( ));
3 %let match=0;
4 %DO i2=1 %to &count_base;
5 %let base_word=%scan(&Str2,&i2,%str( ));
6 %IF &extr_word=&base_word %THEN %let match=1;
7 %END;
8 %IF &match=1 %THEN %let outvar=&outvar &extr_word;
9%END;
5 Codeblock
MACRO
Erklärung :
Das Makro gibt den Wert der Makrovariablen `outvar` zurück, die alle in `Str1` und `Str2` gefundenen gemeinsamen Wörter, durch Leerzeichen getrennt, enthält. `%mend` markiert das Ende der Makrodefinition.
Kopiert!
1 &outvar
2 
3%mend mf_wordsInStr1andStr2;
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 : Copyright (c) 2001-2006 Rodney Sparapani (from _version.sas); Copyright © 2022, SAS Institute Inc. (from print_macro_parameters.sas); Copyright 2010-2023 HMS Analytical Software GmbH (from macro_without_brief_tag.sas, _delfile.json, _issuewarningmessage.json); Allan Bowe (im HELP START/END-Block als allgemeine Referenz erwähnt).


Zugehörige Dokumentation

Aucune documentation spécifique pour cette catégorie.