SAS9

TRIM und Verkettung beherrschen

Simon 14 vues

Bei der Bearbeitung von Textdaten in Base SAS© gibt es zwei ständig wiederkehrende Operationen: das Bereinigen unnötiger Leerzeichen und das Zusammenfügen von Textteilen.

Eine einfache Frage im Forum („Was ist der Unterschied zwischen TRIM und CONCAT?“) warf mehrere wichtige technische Punkte zur Handhabung von Zeichenketten auf.

1. TRIM: Der Leerzeichen-Entferner

In SAS© hat eine Zeichenvariable eine feste Länge. Wenn Sie eine Variable mit 10 Zeichen definieren und das Wort „KATZE“ darin speichern, füllt SAS© die restlichen 6 Zeichen mit Leerzeichen auf. Dies wird als trailing blanks bezeichnet.

Die Funktion TRIM dient dazu, diese nachgestellten Leerzeichen zu entfernen.

  • Beispiel: Wenn VAR1 den Wert '1234 ' (mit Leerzeichen) hat. VAR2 = TRIM(VAR1); ergibt '1234'.

Technische Anmerkung: Wie eine Antwort präzisiert, betrifft TRIM keine Leerzeichen vor dem Text (leading blanks). Um Leerzeichen vor und nach dem Text zu entfernen, wurde historisch TRIM(LEFT(Wert)) verwendet. Heute erledigt die Funktion STRIP dies in einem einzigen Schritt.

2. Die Verkettung: Der Assembler

Die Verkettung ist der Vorgang, zwei Zeichenketten aneinanderzuhängen.

Hier gab es eine kleine Verwirrung im ursprünglichen Thread. Der Benutzer fragt nach einer Definition der Funktion „CONCAT“.

  • In Standard Base SAS© gab es historisch keine Funktion, die einfach „CONCAT“ genannt wurde. Die Operation erfolgt über den Operator || (doppelter vertikaler Balken) oder !!.

  • Die komplexe technische Antwort im Forum (die „Zeichenmatrizen“ erwähnt) bezieht sich auf das Modul SAS©/IML (Matrixsprache), was für die meisten klassischen Benutzer irrelevant ist.

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

3. Das Gewinner-Duo: TRIM + Verkettung

Hier liegt die klassische Anfängerfalle. Da der Verkettungsoperator || die Leerzeichen der ersten Variable beibehält, enthält das Ergebnis oft unerwünschte „Lücken“.

Deshalb werden diese beiden Konzepte fast immer zusammen verwendet.

Note :
Die alte Methode (Klassisch):
1Full = TRIM(Nom) || " " || Prenom;
2 
3/* On nettoie 'Nom', on ajoute un espace manuel, on colle 'Prenom' */
4/* Résultat : "Bond James" */

4. Die moderne Lösung (CAT-Funktionen)

Seit Version 9 hat SAS© eine Familie von Funktionen eingeführt, die das Leben erheblich vereinfachen und die explizite Verwendung von TRIM und || für die einfache Verkettung weniger notwendig machen.

Anstatt mit TRIM zu jonglieren, verwenden Sie die CAT-Funktionen:

  • CATS(arg1, arg2): Verkettet und Strippt (entfernt Leerzeichen vor/nach).

    • Entspricht: TRIM(LEFT(arg1)) || TRIM(LEFT(arg2))

  • CATX('sep', arg1, arg2): Verkettet, Strippt und fügt einen Trennzeichen ein, wenn Text vorhanden ist.

    • Dies ist die heute empfohlene Methode.

Note :
Modernes Beispiel:
1Full = CATX(" ", Nom, Prenom);
2 
3/* Résultat propre : "Bond James" */
Funktion / OperatorAktion
TRIM(var)Entfernt Leerzeichen nur am Ende.
STRIP(var)Entfernt Leerzeichen am Anfang und Ende.
CATS(a, b)Fügt a und b zusammen und entfernt alle unnötigen Leerzeichen.
CATX(' ', a, b)Fügt a und b zusammen und fügt sauber ein Leerzeichen dazwischen ein.