IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Lancer une macro sur plusieurs tables


Sujet :

Macro

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut Lancer une macro sur plusieurs tables
    Bonjour,

    Je m'interroge sur un sujet très simple dont je n'ai pas encore pu trouver la réponse.
    J'ai une macro que j'aimerais lancer sur plusieurs tables, sans avoir à recopier le script de l'exécution X fois. J'ai déjà résolu ce même type problème lorsque les tables ont la même nomenclature (tab1, tab2, ...) en utilisant une boucle DO sur le numéro de la table, mais dans le cas présent, mes tables ont toutes des noms différents.
    Je pensais donc créer une liste qui contient le nom de toutes mes tables, par ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     %let liste('A2M', 'P3', 'A1D');
    et lancer la macro sur chacun des éléments de la liste.

    Mais je ne vois pas du tout comment gérer cela dans SAS, ni même vers où orienter mes recherches...

    Merci d'avance de votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour,

    Comme ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    %MACRO TOTO (TABLE=);
    .
    .
    .
    Code de la macro
    .
    .
    .
    %MEND;
    %TOTO(TABLE=_A2M);
    %TOTO(TABLE=_P3);
    %TOTO(TABLE=_A1D);
    ...

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Merci, mais je voulais pouvoir éviter cette méthode de recopier la ligne 1000 fois en fait.
    Et plutôt passer par qqchose qui ressemblerait à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For I in 1 to 1000;
         %MACRO(liste[I]);
    Next;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    bonjour

    par exemple avec un code comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    %LET Liste =A B C D TOTO ;
    %MACRO m;
    %DO I=1 %TO %SYSFUNC(COUNTW(&Liste));
    %TaMacro(Table=%SYSFUNC(SCAN(&Liste,&i)));
    %END;
    %MEND;
     
    %m;

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Oui, c'est exactement ce que je recherchais, merci !!

    Sauf qu'apparemment, la fonction COUNTW est introuvable...
    N'aurais-je pas une version assez récente ?...

  6. #6
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Quelle version as tu ?

    Si tu n'as pas COUNTW sur ta version de SAS je pense que tu trouvera sans problème une macro %COUNT ou son équivalent sur le net

    bon courage

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Nous sommes sur la version 8 encore.
    Je vais partir à la recherche de cette macro dans ce cas.

    Merci beaucoup en tout cas !!

  8. #8
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Bonjour,
    Tu peux essayer ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %let string=blue red green;
    %let word_cnt=%eval(%sysfunc(count(%cmpres(&string),%str( )))+1);
    %put There are &word_cnt words in the string "&string";

  9. #9
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Hello,
    Je te propose la routine CALL EXECUTE :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    %macro TaMacro(TABLE);
     
    data &table ;
    set sashelp.&table;
    run;
    %mend;
     
     
    /*création d'une table contenant la liste des tables souhaitées */
     
    data list_tab;
    input table $32.;
    cards;
    air
    buy
    cars
    class
    ;
    run;
     
    data _null_;
    set list_tab;
    call execute ("%Tamacro ( " !! left(table) !! " );");
    run;
    -Si tu veux lancer ton programme sur toutes les tables d'une librerie , alors tu peux récupérer la liste de tes tables à partir des vue disctionary de SAS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    proc sql;
    create table list_table as select memname from dictionary.tables where 
    upcase (libname)= 'SASHELP';
    quit;
    Bon courage.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

Discussions similaires

  1. [Conception] Affichage d'une requete sur plusieurs tables
    Par djinko dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/04/2007, 15h43
  2. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 11h54
  3. faire une requête sur plusieurs tables
    Par julien.63 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 16/08/2006, 23h58
  4. [vb6]faire une requete sur plusieurs tables
    Par Henry9 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/07/2006, 03h06
  5. [VBA-E]Lancer une macro sur changement de valeur cellule ?
    Par jeremiegrenoble dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/03/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo