Dans l'univers SAS©, il est fréquent de devoir consolider des données historiques stockées dans une même librairie. Si l'opération est triviale avec des noms de fichiers standardisés (ex: DATA_202301, DATA_202302), elle devient périlleuse lorsque les fichiers proviennent d'imports Excel ou de systèmes hérités utilisant des espaces, des symboles ($, &) ou des formats "texte libre".
Cet article vous montre comment concaténer dynamiquement tout le contenu d'une librairie, même lorsque les noms de tables semblent impossibles à manipuler par programmation.
Prenons l'exemple d'une librairie nommée RH_ARCHIVE. Elle contient des exports mensuels nommés de façon très littérale, incluant des espaces et des caractères spéciaux :
Si vous tentez une approche classique en récupérant la liste des tables via dictionary.tables pour l'injecter dans une étape DATA, SAS© va échouer.
Pourquoi ? Parce que SAS© interprète 'MARS 2024 & PRIMES' comme trois objets distincts (MARS, 2024, &, PRIMES). De plus, sans référence explicite à la librairie, il cherchera ces tables dans WORK.
Vous obtiendrez inévitablement l'erreur :
Pour manipuler ces tables, SAS© exige une syntaxe précise appelée "Name Literal" (littéral de nom), qui ressemble à ceci : 'Nom de la table'n. Il faut également impérativement préfixer le nom de la librairie.
Plutôt que d'écrire le code à la main pour chaque fichier, nous allons utiliser PROC SQL pour générer la syntaxe exacte.
Le Code Optimisé
L'objectif est de construire une chaîne de caractères qui ressemble à :
RH_ARCHIVE.'JANVIER 2024 STAFFING$'n
Voici le code pour automatiser cela via la fonction CATT :
quote(MEMNAME) : Cette fonction entoure le nom récupéré (ex: MARS 2024 & PRIMES) de guillemets doubles. Cela "protège" les espaces et les caractères spéciaux.
'n' : En collant ce suffixe après les guillemets, on indique au moteur SAS© qu'il ne s'agit pas d'une chaîne de texte, mais bien d'un nom de table valide (un littéral).
'RH_ARCHIVE.' : On force l'emplacement de la source. Sans cela, SAS© ne trouverait pas le fichier physique.
Cette technique est universelle : elle fonctionne peu importe la "propreté" des noms de vos fichiers sources. Cependant, pour vos futures tables, privilégiez toujours la norme SAS© standard (pas d'espaces, utilisation de l'underscore _, pas de caractères spéciaux) afin de faciliter la maintenance de vos programmes.