Macro variable dans PROC SQL : fusion de SELECT
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:
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:
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:
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:
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:
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?