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 :

utilisation d'une macro variable dans un programme macro


Sujet :

Macro

  1. #1
    Invité
    Invité(e)
    Par défaut utilisation d'une macro variable dans un programme macro
    Bonjour,

    je souhaite utiliser des macro variable créées auparavant ,dans un programme macro par la suite , de ce genre,

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    /* mon objectif est de ne changer que c'est deux premiers paramètres selon la date du traitement*/
     
    %let param1= condition1;
    %let param2= condition2;
    ....
    .....
    .....
     
    data _null_;
     
    if &param1 = "condition1" then do;
     
    call symput (par1 , tab1) ; /* tab1  2  3  4  5 6  sont des tabels */
    call symput (par2, tab2);
    call symput (par3, tab3);
    call sumput (par4, tab4);
    call symput (par5, tab5);
    ...
    ...
    ...
    end;
     
    if &param1= "condition2" then do;
     
    call symput (par1 , tab4) ; 
    call symput (par2, tab5);
    call symput (par3, tab6);
    ...
    ...
    ...
    end;
    if &param1 = ... then do;
    ...
    ...
    ...
    end;
    run;
     
    %macro mac ( par1a= , par2a= , par3a= , tab=);
     
    proc sql;
    select * from par1 .........quit;
     
    data &tab.;
    set &par2.
    .....
    ....
    run;
    ....
    ...
    .
    .
    .
     
     
    /*suite des étapes où j'utilises les autres tables reférencées dans les call symput */
     
    %mend;
     
    %mac ( par1a= &par1., par2a= &par2. , par3a= &par3., tab= autretable1 );
    %mac ( par1a= &par4., par2a= &par5. , arg3a= &par6. n tab=autretable2 );

    ça n'a pas marché, j'ai essayé avec blobal et ça ne marche pas non plus;

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    %global par1;
    %global par2;
    %global par3;
    ...
    ...
    ...
    %let param1= condition1;
    %let param2= condition2;
    ....
    .....
    .....
     
    data _null_;
     
    if &param1 = "condition1" then do;
     
    call symput (par1 , tab1) ; /* tab1  2  3  4  5 6  sont des tabels */
    call symput (par2, tab2);
    call symput (par3, tab3);
    call sumput (par4, tab4);
    call symput (par5, tab5);
    ...
    ...
    ...
    end;
     
    if &param1= "condition2" then do;
     
    call symput (par1 , tab4) ; 
    call symput (par2, tab5);
    call symput (par3, tab6);
    ...
    ...
    ...
    end;
    if &param1 = ... then do;
    ...
    ...
    ...
    end;
    run;
     
    %macro mac ( par1a= , par2a= , par3a= , tab=);
     
    proc sql;
    select * from par1 .........quit;
     
    data &tab.;
    set &par2.
    .....
    ....
    run;
    ....
    ...
    .
    .
    .
     
     
    /*suite des étapes où j'utilises les autres tables reférencées dans les call symput */
     
    %mend;
     
    %mac ( par1a= &par1., par2a= &par2. , par3a= &par3., tab= autretable1 );
    %mac ( par1a= &par4., par2a= &par5. , arg3a= &par6. n tab=autretable2 );

    merci de votre aide surtout que je ne suis pas sure de bien expliquer mon problème, je suis NOVICE en SAS.

  2. #2
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    Il manque les SET dans tes étapes DATA ?
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  3. #3
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    Peut-être quelques infos en plus pourraient nous aider à t'aider.
    Quel type de message d'erreur as tu ? (une copie de la log où l'erreur est affichée)

    Pour t'aider à débugger par toi même (je met permets ces commentaires car tu indiques que tu es novice) :
    - active les options de débuggage de macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    option mprint mlogic symbolgen ;
    - place des "traceurs" à différentes étapes, pour vérifier les valeurs de tes macros variables, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %put %nrstr(&par1) = -->&par1.<-- ;

  4. #4
    Invité
    Invité(e)
    Par défaut
    je reformule mon besoin:

    ce que je veux savoir est ce que je peux utilisé : &arg ( que j'ai créé dans call symput
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    data _null_;
     
    call symput ( arg, table1);
    run;
    dans un macro programme qui suit :
    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 testa ( arg2= );
     
    proc sql;
    select * from &arg2. ;
    quit;
     
    %mend ;
     
    %testa ( arg2= &arg.);
     
    /* ou bien */
    %testa ( arg2= "arg.");


    c'est tout ce que je veux savoir. Je vous remercie.

    voilà exemple d'erreur dans la log:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    /* lib.tab = une table tab stockée dans librerie li*/
    ERREUR: Spécification de variable invalide, lib.tab. 
            Les noms de variable de forme X.X doivent être soit FIRST.X soit LAST.X.









    Citation Envoyé par RemiBousquet Voir le message
    Peut-être quelques infos en plus pourraient nous aider à t'aider.
    Quel type de message d'erreur as tu ? (une copie de la log où l'erreur est affichée)

    Pour t'aider à débugger par toi même (je met permets ces commentaires car tu indiques que tu es novice) :
    - active les options de débuggage de macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    option mprint mlogic symbolgen ;
    - place des "traceurs" à différentes étapes, pour vérifier les valeurs de tes macros variables, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %put %nrstr(&par1) = -->&par1.<-- ;

  5. #5
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    oui
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Discussions similaires

  1. [XL-2003] Utilisation d'une donnée variable dans une cellule
    Par Baluteaud dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/04/2015, 18h01
  2. Réponses: 3
    Dernier message: 09/11/2011, 13h40
  3. Réponses: 2
    Dernier message: 06/09/2010, 16h05
  4. Utilisation d'une même variable dans différents fonctions de Callback
    Par houjuventini dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 16/11/2007, 08h58
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

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