Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macro Discussion :

[SAS] Vider une liste de tables


Sujet :

Macro

  1. #1
    Nouveau membre du Club
    [SAS] Vider une liste de tables
    Bonjour à tous,

    Je viens vous demander une petite expertise. En effet, j'ai eu une rapide en SAS et malheureusement je pratique peu.
    Voilà mon soucis.

    Actuellement, nous utilisons divers tables pour faire des tests d'intégration de données dans ces dernières. Cependant, c'est assez contraignant car si on désire repartir de zéro, dans mon service, on supprime la/les table(s) pour les recréer ensuite.
    J'avais dans une clé USB perdu dans le tiroir, un bout de code permettant de vider l'ensemble des observations pour UNE table
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %let tlistfic = 
    	work.tab1
    ;
     
    data &tlistfic;
    	set &tlistfic (obs = 0 );
    run;


    L'idée ça serai de pouvoir effectuer cette "vidange" pour un ensemble de tables données. Quand j'essaie de mettre plusieurs tables dans ma variable, ça plante.

    Pouvez-vous me guider sur une solution permettant de donner en entrée un ensemble de table (voir depuis un fichier .txt ; je suis preneur des 2 solutions) et de permettre de vider ces tables? Sachant que je pense à terme, je devrais executer une script shell pour lancer cette macro SAS.

    Merci à vous

  2. #2
    Nouveau membre du Club
    Solution
    Après moult essai et lecture de documentation, je vous donne ma solution qui fonctionne parfaitement.
    Après à vous de l'adapter à ce que vous désirez.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    %global listetable ;
    %let listetable = biblio.tab1 biblio.tab2 biblio.tab3 biblio.tab4 ;
    /* on sépare les tables avec des espaces */
     
    %macro LaMacro ;
    	%let count= %sysfunc(countw(&listetable.,%str( )));
    	%do i=1 %to &count. ;
    		%let table=%sysfunc(scan(&listetable.,&i.,%str( ),mo));
    		data &table. ;
    			set &table. (obs=0) ;
    		run ;
    	%end ;
    %mend LaMacro ;
     
    %LaMacro ;


    Problème résolu

###raw>template_hook.ano_emploi###