Suppression de caractères en fin de chaîne

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Débutant
Publié le :
La macro `mf_trimstr` prend deux arguments : `basestr` (la chaîne à modifier) et `trimstr` (la chaîne à supprimer). Elle détermine la longueur des deux chaînes et vérifie si `basestr` est suffisamment longue. Si `trimstr` est trouvée à la fin de `basestr`, elle est supprimée. Sinon, la chaîne originale `basestr` est retournée. La macro gère également les cas où `basestr` et `trimstr` sont identiques, ou si `basestr` est vide.
Analyse des données

Type : CREATION_INTERNE


La macro opère uniquement sur des chaînes de caractères fournies en paramètres. Elle ne lit ni n'écrit de données externes ou de tables SAS. Elle utilise des fonctions macro pour la manipulation de chaînes.

1 Bloc de code
MACRO
Explication :
Ce bloc définit la macro `mf_trimstr`.
1. **Déclaration de variables locales**: `%local baselen trimlen trimval;` déclare des variables macro locales pour les longueurs des chaînes et la valeur à comparer.
2. **Vérification de la longueur**: Les longueurs de `basestr` et `trimstr` sont calculées. Si `basestr` est plus courte que `trimstr` ou est vide, la macro se termine (`%return`).
3. **Extraction de la sous-chaîne**: La macro extrait une sous-chaîne de `basestr` de la même longueur que `trimstr`, en partant de la fin de `basestr`. `%superq` est utilisé pour gérer les caractères spéciaux.
4. **Comparaison et suppression**:
- Si `basestr` est identique à `trimstr`, la macro se termine (retourne une chaîne vide implicitement).
- Si la sous-chaîne extraite (`trimval`) correspond à `trimstr`, alors `trimstr` est supprimée de la fin de `basestr` en renvoyant une sous-chaîne de `basestr` excluant `trimstr`.
- Sinon (aucune correspondance), la `basestr` originale est retournée.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.