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 :

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;
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
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;
tout ceci fonctionne très bien.

mais je veux terminer en fusionnant toutes ces tables en une.
pour éviter d'écrire un code du genre
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;
j'ai tenté :
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;
mais j'obtiens ce message d'erreur :

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.
pouvez-vous m'aider?