SAS9

Comment copier la structure d'une table sans les données ?

Simon 10 vues

Dans la gestion quotidienne de données sous SAS©, il arrive fréquemment que l'on ait besoin de dupliquer une table existante. Mais que faire si vous ne voulez que le "squelette" de la table (les variables, les formats, les types) sans importer les milliers ou millions de lignes qu'elle contient ?

Que ce soit pour créer un modèle vide pour une nouvelle saisie ou pour initialiser une table d'archivage, voici la méthode la plus simple et la plus efficace pour copier une structure de table d'une bibliothèque à une autre.

Note :
La méthode la plus élégante en SAS© Base repose sur l'utilisation de l'étape DATA combinée à l'instruction STOP.
1DATA ma_lib.nouvelle_table;
2 SET autre_lib.ancienne_table;
3 STOP;
4RUN;
Note :
Imaginons que vous ayez une table VENTES_2023 dans la bibliothèque PROD et que vous vouliez créer une structure vide VENTES_2024 dans votre bibliothèque WORK
1DATA work.ventes_2024;
2 SET prod.ventes_2023;
3 STOP;
4RUN;
Résultat : Vous obtiendrez une table work.ventes_2024 contenant exactement les mêmes colonnes que l'originale, mais elle sera totalement vide.

Pourquoi cela fonctionne-t-il ?

Pour comprendre cette astuce, il faut regarder sous le capot du moteur SAS© :

  1. L'instruction SET : Au moment de la compilation, SAS© lit le descripteur de la table source (prod.ventes_2023). Il prépare le "Vecteur de Données du Programme" (PDV) avec toutes les variables et leurs attributs. La structure est donc prête.

  2. L'instruction STOP : Normalement, l'étape DATA fonctionne comme une boucle implicite qui lit les lignes une par une. L'instruction STOP force l'arrêt immédiat de l'étape DATA avant même que la première ligne de données ne soit chargée dans le PDV et écrite dans la table de sortie.

C'est cette interruption immédiate qui permet de sauvegarder la structure (définie à la compilation) sans jamais traiter les données (exécution).

La prochaine fois que vous aurez besoin d'un modèle de table vide, souvenez-vous : un simple STOP suffit !