Bonjour,
j'essai d'utiliser une macro variable au sein d'une proc SQL mais j'ai toujours une erreur.
1/ je déclare mes variables :
j'utilise ensuite une macro pour créer une vingtaine de tables faisant référence à des tables mensuelles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 /*création de macro variable, */ DATA _null_; SET liste; call symput('num'||left(trim(_n_)),num); call symput('tok'||left(trim(_n_)),tok); call symput('nb_num',_n_); run;
tout ceci fonctionne très 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 %macro test4; %do i=25 %TO &nb_num.; PROC SQL; CREATE TABLE work.PER&&num&i AS SELECT TABL.compte, TABL.opcint, TABL2.mois, TABL2.poste_analy, TABL2.montant * -1 FROM TOTAL AS TABL LEFT JOIN QUALIAC.QUALIAC_MENSCLI_20&&tok&i AS TABL2 ON (TABL.compte = TABL2.cpt) where TABL2.poste_analy in ('67500030A'); QUIT; %end; %mend; %test4;
mais je veux terminer en fusionnant toutes ces tables en une.
pour éviter d'écrire un code du genre
j'ai tenté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 PROC SQL; CREATE TABLE TOTAL_PER AS SELECT * FROM PER25 UNION SELECT * FROM PER26 UNION SELECT * FROM PER27 UNION .......; QUIT;
mais j'obtiens ce message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 %macro fusion; proc sql; CREATE TABLE PER_TOTAL AS SELECT * FROM PER25 %do i=26 %TO &nb_num.; UNION SELECT * FROM PER&&num&i; %end; quit; %mend fusion; %fusion;
pouvez-vous m'aider?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 NOTE: Line generated by the invoked macro "FUSION". 45 UNION SELECT * FROM PER&&num&i; _____ 180 ERROR 180-322: Statement is not valid or it is used out of proper order.
Partager