SAS9

Maîtriser TRIM et la Concaténation

Simon 15 views
Niveau de difficulté
Débutant
Published on :
Stéphanie

Expert Advice

Stéphanie

L'époque des assemblages laborieux du type TRIM(LEFT(var)) || ... est révolue. Adoptez systématiquement la famille des fonctions CAT (notamment CATX et CATS) : elles gèrent nativement le nettoyage des espaces (STRIP) et la conversion de types, réduisant une ligne de code complexe à une simple fonction lisible et robuste

Dans la manipulation de données textuelles sous Base SAS©, deux opérations reviennent constamment : nettoyer les espaces inutiles et coller des morceaux de texte ensemble.

Une question simple posée sur le forum ("Quelle est la différence entre TRIM et CONCAT ?") a soulevé plusieurs points techniques importants sur la gestion des chaînes de caractères.

1. TRIM : Le Nettoyeur d'Espaces

Dans SAS©, une variable caractère a une longueur fixe. Si vous définissez une variable sur 10 caractères et que vous y stockez le mot "CHAT", SAS© comblera les 6 caractères restants avec des espaces vides (blancs). C'est ce qu'on appelle les trailing blanks.

La fonction TRIM sert à supprimer ces espaces finaux.

  • Exemple : Si VAR1 vaut '1234 ' (avec des espaces). VAR2 = TRIM(VAR1); donnera '1234'.

Note technique : Comme le précise une réponse, TRIM ne touche pas aux espaces situés avant le texte (leading blanks). Pour supprimer les espaces avant et après, on utilisait historiquement TRIM(LEFT(valeur)). Aujourd'hui, la fonction STRIP fait cela en une seule étape.

2. La Concaténation : L'Assembleur

La concaténation est l'action de joindre deux chaînes bout à bout.

Ici, il y a une petite confusion dans le fil de discussion original. L'utilisateur demande une définition de la fonction "CONCAT".

  • En Base SAS© standard, il n'existait pas historiquement de fonction nommée simplement "CONCAT". L'opération se fait via l'opérateur || (double barre verticale) ou !!.

  • La réponse technique complexe donnée dans le forum (mentionnant des "matrices de caractères") fait référence au module SAS©/IML (langage matriciel), ce qui est hors sujet pour la plupart des utilisateurs classiques.

1Nom = "Bond";
2Prenom = "James";
3Full = Nom || Prenom;
4/* Résultat : "Bond James" (Les espaces de 'Bond' sont conservés !) */

3. Le Duo Gagnant : TRIM + Concaténation

C'est là que réside le piège classique des débutants. Puisque l'opérateur de concaténation || conserve les espaces de la première variable, le résultat contient souvent des "trous" indésirables.

C'est pourquoi ces deux concepts sont presque toujours utilisés ensemble.

Note :
L'ancienne méthode (Classique) :
1Full = TRIM(Nom) || " " || Prenom;
2 
3/* On nettoie 'Nom', on ajoute un espace manuel, on colle 'Prenom' */
4/* Résultat : "Bond James" */

4. La Solution Moderne (Fonctions CAT)

Depuis la version 9, SAS© a introduit une famille de fonctions qui simplifient grandement la vie et rendent l'utilisation explicite de TRIM et || moins nécessaire pour la concaténation simple.

Plutôt que de jongler avec TRIM, utilisez les fonctions CAT :

  • CATS(arg1, arg2) : Concatène et Strip (supprime les espaces avant/après).

    • Équivalent à : TRIM(LEFT(arg1)) || TRIM(LEFT(arg2))

  • CATX('sep', arg1, arg2) : Concatène, Strip, et insère un séparateur s'il y a du texte.

    • C'est la méthode recommandée aujourd'hui.

Note :
Exemple Moderne :
1Full = CATX(" ", Nom, Prenom);
2 
3/* Résultat propre : "Bond James" */
Fonction / OpérateurAction
TRIM(var)Supprime les espaces à la fin uniquement.
**`
STRIP(var)Supprime les espaces au début et à la fin.
CATS(a, b)Colle a et b en supprimant tous les espaces inutiles.
CATX(' ', a, b)Colle a et b en insérant un espace entre les deux proprement.