Eliminación de caracteres al final de la cadena

Este código también está disponible en: Deutsch English Français
Nivel de dificultad
Principiante
Publicado el :
La macro `mf_trimstr` toma dos argumentos: `basestr` (la cadena a modificar) y `trimstr` (la cadena a eliminar). Determina la longitud de ambas cadenas y verifica si `basestr` es lo suficientemente larga. Si `trimstr` se encuentra al final de `basestr`, se elimina. De lo contrario, se devuelve la cadena original `basestr`. La macro también maneja los casos en que `basestr` y `trimstr` son idénticas, o si `basestr` está vacía.
Análisis de datos

Type : CREATION_INTERNE


La macro opera únicamente sobre cadenas de caracteres proporcionadas como parámetros. No lee ni escribe datos externos o tablas SAS. Utiliza funciones macro para la manipulación de cadenas.

1 Bloque de código
MACRO
Explicación :
Este bloque define la macro `mf_trimstr`.
1. **Declaración de variables locales**: `%local baselen trimlen trimval;` declara variables macro locales para las longitudes de las cadenas y el valor a comparar.
2. **Verificación de la longitud**: Se calculan las longitudes de `basestr` y `trimstr`. Si `basestr` es más corta que `trimstr` o está vacía, la macro termina (`%return`).
3. **Extracción de la subcadena**: La macro extrae una subcadena de `basestr` de la misma longitud que `trimstr`, partiendo del final de `basestr`. Se utiliza `%superq` para manejar caracteres especiales.
4. **Comparación y eliminación**:
- Si `basestr` es idéntica a `trimstr`, la macro termina (devuelve una cadena vacía implícitamente).
- Si la subcadena extraída (`trimval`) coincide con `trimstr`, entonces `trimstr` se elimina del final de `basestr` devolviendo una subcadena de `basestr` excluyendo `trimstr`.
- De lo contrario (sin coincidencia), se devuelve la `basestr` original.
¡Copiado!
1%macro mf_trimstr(basestr,trimstr);
2%local baselen trimlen trimval;
3 
4/* return if basestr is shorter than trimstr (or 0) */
5%let baselen=%LENGTH(%superq(basestr));
6%let trimlen=%LENGTH(%superq(trimstr));
7%IF &baselen < &trimlen or &baselen=0 %THEN %return;
8 
9/* obtain the characters from the end of basestr */
10%let trimval=%qsubstr(%superq(basestr)
11 ,%LENGTH(%superq(basestr))-&trimlen+1
12 ,&trimlen);
13 
14/* compare and if matching, chop it off! */
15%IF %superq(basestr)=%superq(trimstr) %THEN %DO;
16 %return;
17%END;
18%ELSE %IF %superq(trimval)=%superq(trimstr) %THEN %DO;
19 %qsubstr(%superq(basestr),1,%LENGTH(%superq(basestr))-&trimlen)
20%END;
21%ELSE %DO;
22 &basestr
23%END;
24 
25%mend mf_trimstr;
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.

Documentación relacionada

Aucune documentation spécifique pour cette catégorie.