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 :

Boucle et déclaration de macro variable


Sujet :

Macro

  1. #1
    Membre à l'essai
    Boucle et déclaration de macro variable
    Bonjour à tous,

    J'ai un petit problème avec le call symput. J'ai un petit morceau de programme qui fonctionne très bien quand je n'ai besoin de le faire qu'une seule fois:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Proc contents data= limitm_FR  out=contents; run;
     
         Proc sql; 
         Create table temp as
         Select distinct count(NAME) as nb_var 
         from contents 
         where name like "FR%"; 
         quit;
     
         Data _NULL_;
         set temp;
         Call symput("nb_var",nb_var);
         run;


    Cependant, je dois le reproduire sur plusieurs années (j'ai donc un table qui correspond à chaque année). J'ai bêtement essayé ceci:
    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
    %Macro LPP4;
    %do annee=2011 %to 2017;
     
         Proc contents data= limitm_FR_&annee   out=contents; run;
     
         Proc sql; 
         Create table temp as
         Select distinct count(NAME) as nb_var 
         from contents 
         where name like "FR%"; 
         quit;
     
         Data _NULL_;
         set temp;
         Call symput("nb_var_&annee",nb_var);
         run;
    %end;
    %mend LPP4;
     
    %LPP4;


    Sauf que le Call sympput n'aime pas nb_var_&annee et j'ai comme résultat nb_var_2011 etc.

    Je pense que c'est une erreur bête, mais je ne vois pas comment m'en sortir.

    Merci par avance pour toute l'aide que vous pourrez m'apporter.
    Camille

  2. #2
    Membre éprouvé
    Créer une macro variable dans une procédure SQL
    Bonjour,

    Vous pouvez créer la macro variable directement dans la proc sql :

    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 LPP4;
      %do annee=2011 %to 2017;
        proc contents data=limitm_FR_&annee out=contents;
        run;
     
        proc sql;
          select distinct count(name) into : nb_var&annee
            from contents
            where name like "FR%";
        quit;
     
        %put &&nb_var&annee;
      %end;
    %mend;


    Cette page pourra vous intéresser : 3 méthodes pour construire des macros variables sans macro.

    Cordialement,

    PS : Pensez à utiliser les balises [CODE] et à indenter vos programmes pour faciliter la lecture de vos messages. Vous pouvez éditer votre précédent message.

  3. #3
    Membre à l'essai
    Merci beaucoup pour votre réponse! Je ne l'ai pas encore testé (manque de temps) mais elle semble résoudre mon problème. J'oublie tout le temps qu'il est possible de créer des macros avec une proc SQL.

    Promis, je serai vigilante pour mes prochaines publications et ferai attention à utiliser balises et indentations.

    Merci encore!!

###raw>template_hook.ano_emploi###