Extracción de palabras comunes en dos cadenas

Este código también está disponible en: Deutsch English Français
Nivel de dificultad
Principiante
Publicado el :
La macro `mf_wordsInStr1andStr2` toma dos parámetros, `Str1` y `Str2`, que son cadenas de caracteres. Compara las palabras de `Str1` con las de `Str2` y construye una nueva cadena que contiene solo las palabras presentes en ambas cadenas. La comparación es sensible a mayúsculas y minúsculas. Si alguna de las cadenas está vacía, la macro muestra un mensaje en el log y no devuelve nada.
Análisis de datos

Type : CREATION_INTERNE


La macro procesa cadenas de caracteres proporcionadas como parámetros. No lee ni escribe datos SAS tradicionales o externos.

1 Bloque de código
MACRO
Explicación :
Definición de la macro `mf_wordsInStr1andStr2` con sus parámetros de entrada `Str1` y `Str2`. Declaración de las variables macro locales utilizadas para el conteo de palabras, los bucles, el almacenamiento de las palabras extraídas y el resultado final.
¡Copiado!
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 Bloque de código
MACRO
Explicación :
Este bloque verifica si alguna de las cadenas de entrada (`Str1` o `Str2`) está vacía. Si es así, se muestra un mensaje en el log de SAS indicando los valores de las cadenas y la macro termina (`%return`) sin producir ninguna salida.
¡Copiado!
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 Bloque de código
MACRO
Explicación :
Uso de la función macro `%sysfunc(countw(...))` para contar el número de palabras en cada cadena de entrada (`Str1` y `Str2`) y almacenar estos conteos en las variables macro `count_base` y `count_extr`.
¡Copiado!
1%let count_base=%sysfunc(countw(&Str2));
2%let count_extr=%sysfunc(countw(&Str1));
3 
4 Bloque de código
MACRO
Explicación :
Bucle externo (`%do i=1 %to &count_extr;`) para recorrer cada palabra de `Str1`. Para cada palabra (`extr_word`), un bucle interno (`%do i2=1 %to &count_base;`) recorre todas las palabras de `Str2`. Si se encuentra una coincidencia (`&extr_word=&base_word`), la variable `match` se establece en 1. Si `match` es 1 después del bucle interno, la palabra (`extr_word`) se agrega a la variable macro `outvar` que acumula el resultado.
¡Copiado!
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 Bloque de código
MACRO
Explicación :
La macro devuelve el valor de la variable macro `outvar`, que contiene todas las palabras comunes encontradas en `Str1` y `Str2`, separadas por espacios. `%mend` marca el final de la definición de la macro.
¡Copiado!
1 &outvar
2 
3%mend mf_wordsInStr1andStr2;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : 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 (mencionado en el bloque HELP START/END como referencia general).


Documentación relacionada

Aucune documentation spécifique pour cette catégorie.