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 :

Macro simple pour soit Empiler (DATA SET), soit Fusionner (DATA MERGE) plusieurs tables


Sujet :

Macro

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut Macro simple pour soit Empiler (DATA SET), soit Fusionner (DATA MERGE) plusieurs tables
    Bonjour tout le monde,
    Je débute en sas macro et le petit bout de code que j'ai écrit ne tourne pas.
    Je cherche à empiler 35 tables de même structure par macro. (Mais pour l'exemple j'ai retenu que 6 tables).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Data BDE_Jan-Juin13; 
    	Set BDE_0113 BDE_0213 BDE_0313 BDE_0413 BDE_0513 BDE_0613    
    ;Run;
    J'ai écrit une premiere macro M1... Et ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %Let Table1=BDE_0113; %Let Table2=BDE_0213; %Let Table3=BDE_0313;
    %Let Table1=BDE_0413; %Let Table2=BDE_0513; %Let Table3=BDE_0613;
     
    Data BDE-M1_Jan_Juin13;  
    Set &Table1. &Table2. &Table3.&Table4. &Table5. &Table6.;
    Run;
    Maintenant je cherche à reécrire le même programme avec une boucle do (=M2)... Et c'est là où ça coince.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %Macro EmpilTable;
    Data BDE-M2_Jan_Juin13;  
    %Do I=1 To 6
     Set &&Table&I. ;
    %End;
    Run;
    %Mend EmpilTable;
    %EmpilTable;
    J'ai comme erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A character operand was found in the %EVAL function or %IF condition where a numeric operand is required.
    The %TO value of the %DO I loop is invalid
    Est-ce que quelqu'un peut m'aider là dessus svp?
    Merci d'avance.

  2. #2
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 37
    Points : 206
    Points
    206
    Par défaut
    Bonjour,
    Essayez ce code .
    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
     
     
    data BDE_0113 BDE_0213 BDE_0313 BDE_0413 BDE_0513 BDE_0613 ;
    set sashelp.class;
    run;/*création des 6 tables pour tester la macro*/
     
     
    %Let Table1=BDE_0113; 
    %Let Table2=BDE_0213;
    %Let Table3=BDE_0313;
    %Let Table4=BDE_0413;
    %Let Table5=BDE_0513; 
    %Let Table6=BDE_0613;
     
    Data BDE_M1_Jan_Juin13; 
    Set &Table1. &Table2. &Table3. &Table4. &Table5. &Table6.;
    Run;
    /*celui la c'est votre exemple corrigé attention au nom que vous donnez aux tables le - (tiret de 6) n'est pas accepté dans les noms sas*/
     
    options  mprint;
    %Macro EmpilTable;
    Data BDE_M2_Jan_Juin13; 
    Set
    %Do I=1 %To 6;/*le macro langage permet de générer le texte souhaité dans ce cas  il écrit BDE_0113 concatène  BDE_0213 et ainsi de suite BDE_0313 BDE_0413 BDE_0513 BDE_0613 */
     &&Table&I. 
    %End;
    ;
    Run;
    %Mend EmpilTable;
    %EmpilTable
    Cordialement

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup Joseph! Ca fonctionne. Question/sujet résolu.

    Juste pour info, Je m'étais inspiré du programme N° 3 du lien suivant qui bizaremment me donne les même erreurs.
    https://thesasreference.wordpress.co...y_alternative/

    Merci encore et Bon après midi.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut Suis désolé d'abuser de votre gentillesse
    Re-bonjour

    Je reviens avec la même question cette fois ci c'est pour faire une fusion verticale (en macro) et avoir les colonnes de chaque mois côte à côte.
    En partant de la solution que m'a donnée Josef, j’ai adapté 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
    21
    22
    23
    24
    25
    26
    27
    28
     
    data BDE_0113 BDE_0213 BDE_0313 BDE_0413 BDE_0513 BDE_0613 ;
    set sashelp.class;
    run; /*création des 6 tables pour tester la macro*/
     
    %Let Table1=BDE_0113; 
    %Let Table2=BDE_0213;
    %Let Table3=BDE_0313;
    %Let Table4=BDE_0413;
    %Let Table5=BDE_0513; 
    %Let Table6=BDE_0613;
    %Let Id=Name;
     
    Data BDE_M3_Jan_Juin13; 
    Merge &Table1. &Table2. &Table3. &Table4. &Table5. &Table6.;
    By &Id;
    Run;
    %Macro MergeTable;
    Data BDE_M3_Jan_Juin13; 
    Merge
    %Do I=1 %To 6;
     &&Table&I. 
    %End;
    %By &Id
    ;
    Run;
    %Mend MergeTable;
    %MergeTable
    Et naturellement ca ne fonctionne pas! Alors à quel niveau se trouve mon erreur ?

    Je vous remercie.

  5. #5
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 37
    Points : 206
    Points
    206
    Par défaut Macro simple pour soit Empiler (DATA SET), soit Fusionner (DATA MERGE) plusieurs tables
    Bonjour,

    ci contre où se situe l'erreur:
    Votre programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    %Macro MergeTable;
    Data BDE_M3_Jan_Juin13; 
    Merge
    %Do I=1 %To 6;
     &&Table&I. 
    %End; /*dans votre boucle vous souhaitez concaténer les nom des table une à une sans le point virgule donc le point virgule de l'instruction merge doit se situer à l'extérieur de la boucle juste après le %end;
    */
    %By &Id /*pour quoi le % dans le by */
    ;
    Run;
    %Mend MergeTable;
    %MergeTable
    Le code corrigé


    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
     
    data BDE_0113 BDE_0213 BDE_0313 BDE_0413 BDE_0513 BDE_0613 ;
    set sashelp.class;
    run; /*création des 6 tables pour tester la macro*/
     
    %Let Table1=BDE_0113; 
    %Let Table2=BDE_0213;
    %Let Table3=BDE_0313;
    %Let Table4=BDE_0413;
    %Let Table5=BDE_0513; 
    %Let Table6=BDE_0613;
    %Let Id=Name;
     
    Data BDE_M3_Jan_Juin13; 
    Merge &Table1. &Table2. &Table3. &Table4. &Table5. &Table6.;
    By &Id;
    Run;
    %Macro MergeTable;
    Data BDE_M3_Jan_Juin13; 
    Merge
    %Do I=1 %To 6;
     &&Table&I. 
    %End;
    ;
    By &Id;
    Run;
    %Mend MergeTable;
    %MergeTable
    Remarque : attention de ne pas avoir many to many dans votre clé pour la jointure avec merge.
    Bon courage.
    Cordialement

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Bonjour Joseph,
    Bonjour aux autres "DEVELOPPeurs",
    D'abord Merci pour le temps que vous consacrez à mon problème.

    Merci Joseph. J'ai tout compris. (Le "%By" au lieu de "By" doit être à cause du désespoir car devant le manque de solution, il fallait tout essayer )

    La réécriture du macro programme M2 en M3 a bien fonctionné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %Let Table1=BDE_0113; 
    %Let Table2=BDE_0213;
    %Let Table3=BDE_0313;
    %Let Table4=BDE_0413;
    %Let Table5=BDE_0513; 
    %Let Table6=BDE_0613;
    %Let Id=Name;
     
    Data BDE_M2_Jan_Juin13; 
    Merge &Table1. &Table2. &Table3. &Table4. &Table5. &Table6.;
    By &Id;Run;
    Equivaut bien à
    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
    %Let Table1=BDE_0113; 
    %Let Table2=BDE_0213;
    %Let Table3=BDE_0313;
    %Let Table4=BDE_0413;
    %Let Table5=BDE_0513; 
    %Let Table6=BDE_0613;
    %Let Id=Name;
     
    %Macro MergeTable;
    Data BDE_M3_Jan_Juin13; 
    Merge
    %Do I=1 %To 6;
     &&Table&I. 
    %End;
    ;
    By &Id;
    Run;
    %Mend MergeTable;
    %MergeTable
    Sauf que (oui il y a un mais) le programme (M2 comme M3) ne donne pas ce qu'il est sensé faire c'est à dire une "vraie" fusion verticale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Imaginons 2 tables A et B
    Table A avec 2 col (col ID, Col A) et Table B avec 2 col (col ID, Col B) 
    Normalement après une fusion je dois avoir une Table Fus avec 3 col (Col ID, Col A, Col B). En tout cas c'est ce que je voudrais avoir.
    Je continue à chercher de mon coté. Je précise tout de même que ce n'est pas urgent.

    Ps: Il y a biensûr absence de doubon dans les id ==> donc pas de risque de fusion many-to-many.

    Encore Merci et bonne journée à vous!

  7. #7
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 37
    Points : 206
    Points
    206
    Par défaut Macro simple pour soit Empiler (DATA SET), soit Fusionner (DATA MERGE) plusieurs tables
    Bonjour samoterell,
    Je ne suis pas sur avoir compris votre question.
    Ceci dit:
    La macro consiste à générer la liste des tables à fusionner verticalement (votre promier cas) ou horizontalement (votre 2 eme cas).
    Après derrière, c'est du SAS base donc si vous avez une liste de variables équivalentes dans les deux tables sont écrasé par celle de la deuxième table, si par contre les variables sont différentes dans les deux tables (vous les aurez en sortie)
    votre exemple: si table 1 (id, varA) table2 (id, varB).
    Fus contient:
    Si vous utilisez merge: vous aurez trois colonnes, id, varA, varB
    Si vous utilisez set : vous aurez trois colonnes: id,varA, varb.


    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
     
     
     
    data BDE_0113(keep=name age); set sashelp.class;
    run;
     
    data BDE_0213(keep=name sex); set sashelp.class;
    run;
     
     
    %Let Table1=BDE_0113; 
    %Let Table2=BDE_0213;
     
     
    %Let Id=Name;
     
    %Macro MergeTable;
    Data BDE_M3_Jan_Juin13; 
    Merge
    %Do I=1 %To 2;
     &&Table&I. 
    %End;
    ;
    By &Id;
    Run;
    %Mend MergeTable;
    %MergeTable
    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
     
    data BDE_0113(keep=name age); set sashelp.class;
    run;
     
    data BDE_0213(keep=name sex); set sashelp.class;
    run;
     
     
    %Let Table1=BDE_0113; 
    %Let Table2=BDE_0213;
     
     
    %Let Id=Name;
     
    %Macro MergeTable;
    Data BDE_M3_Jan_Juin13; 
    set
    %Do I=1 %To 2;
     &&Table&I. 
    %End;
    ;
    By &Id;
    Run;
    %Mend MergeTable;
    %MergeTable
    Cordialement

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Bonjour Joseph,

    En fait vous aviez raison depuis le début. Toutes mes excuses !!. C’est moi.
    La table Fus, dans mon exemple, qui est la fusion des tables A(Id, var A) et B(Id, var B) ne contenait pas les 3 var attendues (Id, varA, varB) simplement parce que dans la Table B ma varB avait le même nom que celui dans la table A. En clair, je « mergeais » tableA (Id, varA) et table B(Id, varA).

    Maintenant tout est ok. Un grand pour tout.

    Bonne journée à vous.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Concaténer des tables par mois
    Bonjour à tous, je déterre cette discussion pour un problème assez similaire mais que je ne parviens pas à résoudre avec l'aide de cette discussion.

    Pour faire court, tous les mois je lance un programme qui va compiler les tables de chaque mois et ce sur un an. Par exemple, en juin 2018, on veut compiler les tables de juillet 2017 à juin 2018. Je vous mets le code ci-dessous.

    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
    %Macro EmpilTable;
    	%let num=&aaaa&mm;
    	%let mois_tmp=&mm;
    	%let annee_tmp=&aa;
     
    Data test; 
    	Set
    	%Do I=1 %To 12;
    		%if &mois_tmp=01 %then %do; /* Si on était en janvier (01)  alors on passe à décembre (12) */
    	                   %let mois_tmp=12;
    	                   %let annee_tmp=%eval(&aa - 1); /* et on décrémente l'année */
     
    	                %end;
     
    	                %else %do ;
    						%let mois_tmp=%sysfunc(putn(%eval(%sysfunc(putn(&mois_tmp,2.))-1),Z2.));
    	                    %let num=&mois_tmp&annee_tmp ;
    	                %end;
     
    	lib.exemple&num. 
    	%End;
    ;
    Run;
    %mend ;
    Lorsque je lance cette macro, il me compile les données de juin 2017 à mai 2018 (un mois de différence) et ne me prend pas le mois de décembre mais compile deux fois le mois de janvier.
    Si vous avez la moindre idée du problème, ça m'arrangerait.

    Merci !!

  10. #10
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Pourquoi ne pas faire simple et laisser le programme incrémenter pour toi ?
    Tu pars de la date d'aujourd'hui, tu recules d'un an puis tu boucles :

    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 EmpilTable;
    %Do I=11 %To 0 %By -1;
    	/* On recule de 11 mois puis on incrémente mois par mois jusqu'à aujourd'hui */
    	Data _Null_;
    	date = intnx('month',today(),-&i.);
    	Call symputx ('Mois_Tmp',Put(month(date),z2.));
    	Call symputx ('Annee_Tmp',year(date));
    	run;
     
    	Data test&i.; 
    		Set lib.exemple&num. ;
    	Run;
    %End;
    %mend ;
    En espérant que ça puisse t'aider.

    Flo00154

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Salut flo et merci pour ta réponse, elle m'a bien aidée.

    Cependant j'ai toujours quelques soucis : le nom des tables que je veux empiler sont sous la forme "exemple&mm&aa" par exemple "exemple0618". Vu que je veux compiler un an, après janvier l'année est décrémentée de 1. J'ai réalisé le code ci-dessous qui me compile les tables de juin 2018 à décembre 2017 mais au-delà, il repart à novembre 2018.

    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
     
    %Macro EmpilTable;
    data test;
    	set _null_ ;
    run ;
     
    %Do I=0 %To 11 ;
    	/* On recule de 11 mois puis on incrémente mois par mois jusqu'à aujourd'hui */
    	Data _Null_;
    	date = intnx('month',&finmois.,-&i.);
    	Call symputx ('Mois_Tmp',Put(month(date),z2.));
    	run;
     
    	%if &mois_tmp = 12 %then %do; 
     
    	                 		%let annee_tmp2=%substr(%sysfunc(putn(&finmois,MONYY5.)),4); /* et on décrémente l'année */
    							%let annee_tmp2=%eval(&annee_tmp2 -1) ;
    	               		   %end;
     
    						   %else %do ;
    							%let annee_tmp2=%substr(%sysfunc(putn(&finmois,MONYY5.)),4); 
    	               		   %end;
     
    	/*%let an = %substr(&Annee_tmp,4) ;*/
     
     
    	Data test; 
    		Set test lib.exemple&Mois_Tmp.&annee_tmp2. ;
    	Run;
     
    %End;
     
    %mend ;
    %EmpilTable ;
    Pour essayer d'être plus clair, j'ai déjà une macro lancé au préalable qui me créé la macro variable &finmois (ici donc le 30 juin 2018), et d'autres macro variables comme le numéro de mois et de l'année.
    A partir de ça (ou autrement bien-sûr) j'aimerai pouvoir décrémenter l'année lorsque l'on passe en décembre.

    Je sais pas si je suis très clair, n'hésitez pas à me poser d'avantages de questions.

    Merci de votre aide !

    EDIT :
    J'ai trouvé moyen de faire ce que je voulais en modifiant légèrement le code ci-dessus. Je le mets dessous si jamais ça peut aider par le futur :

    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
     
    %Macro EmpilTable;
    data test;
    	set _null_ ;
    run ;
     
    %let annee_tmp2=%substr(%sysfunc(putn(&finmois,MONYY5.)),4);  /* Je sors la date de l'année en cours de la boucle, en lui donnant le même nom que celle qui va changer après */ 
     
    %Do I=0 %To 11 ;
    	/* On recule de 11 mois puis on incrémente mois par mois jusqu'à aujourd'hui */
    	Data _Null_;
    	date = intnx('month',&finmois.,-&i.);
    	Call symputx ('Mois_Tmp',Put(month(date),z2.));
    	run;
     
    	%if &mois_tmp = 12 %then %do; 
     
    	                 		%let annee_tmp2=%substr(%sysfunc(putn(&finmois,MONYY5.)),4); /* et on décrémente l'année */
    							%let annee_tmp2=%eval(&annee_tmp2 -1) ;
    	               		        %end;
     
    	Data test; 
    		Set test lib.exemple&Mois_Tmp.&annee_tmp2. ;
    	Run;
     
    %End;
     
    %mend ;
    %EmpilTable ;
    Merci du coup de main !

  12. #12
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    Une solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %macro test(mois=);
    data reg;
     
    set %do i=1 %to 12;
     
    table_%sysfunc(putn(%sysfunc(intnx (month, %sysfunc(inputn(01&mois.,ddmmyy6.)) ,-&i.)),mmyyn4.))
     
    %end;
    ;
     
    %mend;
     
    %test(mois=0518);
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci m.brahim ton code marche à merveille !

    Je l'ai adapté pour qu'il marche comme il me convient, ça donne ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    %macro EmpilTable(mois);
    data reg;
     
    set %do i=0 %to 11;
     
    lib.test%sysfunc(putn(%sysfunc(intnx (month, %sysfunc(inputn(01&mois.,ddmmyy6.)) ,-&i.)),mmyyn4.))
     
    %end;
    ;
     
    %mend;
    %EmpilTable(0518);
    Avec ta méthode je n'obtenais pas le mois en cours
    Merci encore !

    Lagaut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Insert et select pour insérer plusieurs lignes dans table
    Par Khof59 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/05/2014, 21h19
  2. Macro pour créer plusieurs tables access a partir d'un fichier Excel
    Par jonathan810 dans le forum Macros Access
    Réponses: 6
    Dernier message: 02/05/2013, 15h01
  3. Réponses: 2
    Dernier message: 13/11/2012, 09h27
  4. Réponses: 13
    Dernier message: 27/09/2011, 12h08
  5. [XL-2003] macro simple pour déplacer des lignes dans un tableau
    Par akka01 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/08/2010, 16h24

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