SAS9

Dominando TRIM y la Concatenación

Simon 10 vistas

Al manipular datos textuales en Base SAS©, dos operaciones son constantes: limpiar espacios innecesarios y unir fragmentos de texto.

Una pregunta simple planteada en el foro ("¿Cuál es la diferencia entre TRIM y CONCAT?") suscitó varios puntos técnicos importantes sobre la gestión de cadenas de caracteres.

1. TRIM: El Limpiador de Espacios

En SAS©, una variable de caracteres tiene una longitud fija. Si define una variable de 10 caracteres y almacena la palabra "CHAT" en ella, SAS© completará los 6 caracteres restantes con espacios en blanco. Esto se conoce como trailing blanks.

La función TRIM se utiliza para eliminar estos espacios finales.

  • Ejemplo: Si VAR1 es '1234 ' (con espacios). VAR2 = TRIM(VAR1); dará '1234'.

Nota técnica: Como se especifica en una respuesta, TRIM no afecta a los espacios situados antes del texto (leading blanks). Para eliminar los espacios antes y después, históricamente se utilizaba TRIM(LEFT(valor)). Hoy en día, la función STRIP lo hace en un solo paso.

2. La Concatenación: El Ensamblador

La concatenación es la acción de unir dos cadenas de extremo a extremo.

Aquí, hay una pequeña confusión en el hilo de discusión original. El usuario pide una definición de la función "CONCAT".

  • En Base SAS© estándar, históricamente no existía una función llamada simplemente "CONCAT". La operación se realiza mediante el operador || (doble barra vertical) o !!.

  • La respuesta técnica compleja dada en el foro (mencionando "matrices de caracteres") hace referencia al módulo SAS©/IML (lenguaje matricial), lo cual está fuera de tema para la mayoría de los usuarios clásicos.

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

3. El Dúo Ganador: TRIM + Concatenación

Aquí es donde reside la trampa clásica de los principiantes. Dado que el operador de concatenación || conserva los espacios de la primera variable, el resultado a menudo contiene "huecos" indeseados.

Por eso estos dos conceptos se usan casi siempre juntos.

Note :
El método antiguo (Clásico):
1Full = TRIM(Nom) || " " || Prenom;
2 
3/* On nettoie 'Nom', on ajoute un espace manuel, on colle 'Prenom' */
4/* Résultat : "Bond James" */

4. La Solución Moderna (Funciones CAT)

Desde la versión 9, SAS© introdujo una familia de funciones que simplifican enormemente la vida y hacen que el uso explícito de TRIM y || sea menos necesario para la concatenación simple.

En lugar de hacer malabares con TRIM, utilice las funciones CAT:

  • CATS(arg1, arg2): Concatena y Strip (elimina los espacios antes/después).

    • Equivalente a: TRIM(LEFT(arg1)) || TRIM(LEFT(arg2))

  • CATX('sep', arg1, arg2): Concatena, Strip, e inserta un separador si hay texto.

    • Es el método recomendado hoy en día.

Note :
Ejemplo Moderno:
1Full = CATX(" ", Nom, Prenom);
2 
3/* Résultat propre : "Bond James" */
Función / OperadorAcción
TRIM(var)Elimina los espacios solo al final.
**`
STRIP(var)Elimina los espacios al principio y al final.
CATS(a, b)Une a y b eliminando todos los espacios innecesarios.
CATX(' ', a, b)Une a y b insertando un espacio entre ambos de forma limpia.