Macro de extracción de palabras únicas entre dos cadenas

Este código también está disponible en: Deutsch English Français
Nivel de dificultad
Principiante
Publicado el :
La macro `%mf_wordsInStr1ButNotStr2` está diseñada para identificar y extraer palabras únicas. Acepta dos parámetros principales, `Str1` y `Str2`, ambos cadenas de caracteres que contienen palabras separadas por espacios. Se realiza una verificación inicial para asegurar que las cadenas de entrada no estén vacías; si lo están, la macro muestra un mensaje informativo y termina prematuramente.
Las variables locales (`count_base`, `count_extr`, `i`, `i2`, `extr_word`, `base_word`, `match`, `outvar`) se declaran para evitar cualquier interferencia con variables macro globales. Las funciones macro `%sysfunc(countw(...))` se utilizan para determinar el número de palabras en cada cadena, almacenadas en `count_extr` para `Str1` y `count_base` para `Str2`.
El núcleo de la lógica es un doble bucle anidado. El bucle externo (`%do i=1 %to &count_extr;`) itera sobre cada palabra de `Str1`, extraída por `%scan(&Str1,&i,%str( ))`. Para cada palabra extraída (`extr_word`), se inicializa una variable `match` a 0. El bucle interno (`%do i2=1 %to &count_base;`) recorre entonces cada palabra de `Str2`, extraída de manera similar (`base_word`). Si `extr_word` coincide con `base_word`, `match` se establece en 1.
Después de finalizar el bucle interno, si la variable `match` sigue siendo 0 (indicando que no se encontró ninguna palabra coincidente en `Str2`), entonces `extr_word` se añade a la variable macro `outvar`, que acumula las palabras únicas. Finalmente, la macro emite el contenido de `outvar`, presentando así las palabras de `Str1` que no estaban presentes en `Str2`.
Análisis de datos

Type : CREATION_INTERNE


La macro `%mf_wordsInStr1ButNotStr2` procesa exclusivamente las cadenas de caracteres que se le pasan como argumentos (`Str1` y `Str2`). No hay acceso directo a conjuntos de datos SAS existentes (incluido SASHELP) o a archivos externos para sus operaciones principales. Por lo tanto, los 'datos' procesados son valores textuales proporcionados dinámicamente durante la llamada a la macro, sin requerir fuentes de datos externas o internas preexistentes.

1 Bloque de código
MACRO
Explicación :
Este bloque define la macro SAS `%mf_wordsInStr1ButNotStr2`. Utiliza variables locales para encapsular su funcionamiento. La lógica comienza con una verificación de las cadenas de entrada para asegurar que no estén vacías, seguido del cálculo del número de palabras en cada cadena a través de `%sysfunc(countw())`. Los bucles anidados recorren las palabras de ambas cadenas utilizando la función `%scan()`. La palabra actual de `Str1` (`extr_word`) se compara con cada palabra de `Str2` (`base_word`). Si `extr_word` no se encuentra en `Str2`, se añade a la variable macro `outvar`. Finalmente, la macro emite el contenido de `outvar`, proporcionando la lista de palabras únicas presentes en `Str1` pero ausentes de `Str2`. Esta implementación es puramente macro y no genera conjuntos de datos SAS intermedios.
¡Copiado!
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;
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 : La información de derechos de autor se recopila de la sección de ayuda de la macro principal y de los archivos referenciados: 'Allan Bowe' (autor o colaborador mencionado en la ayuda principal). Derechos de autor adicionales de los archivos referenciados: 'Copyright (c) 2001-2006 Rodney Sparapani' (del archivo `_version.sas`, bajo licencia GNU General Public License), 'Copyright 2010-2023 HMS Analytical Software GmbH' (del archivo `macro_without_brief_tag.sas`), 'Copyright © 2022, SAS Institute Inc.' (del archivo `print_macro_parameters.sas`, bajo licencia Apache-2.0), y 'Código original de ChrisNZ' (del archivo `datastep_infile_trick.json`, bajo licencia Apache-2.0). También se incluyen extractos de la documentación de SAS Viya en las referencias.


Documentación relacionada

Aucune documentation spécifique pour cette catégorie.