我有下面的宏PARAMETERS,它將值賦給五個變量並創建表MD_WRK.SUB_ID。我的問題是宏中的代碼工作正常,直到我把它放在宏中。現在變量沒有被填充,並且用於表創建的PROC SQL沒有被執行。當我刪除「%MACRO」時,PROC SQL顏色會發生變化以表明它是正確的,但是當它們在宏中時,它們會變灰。我不明白爲什麼宏中的代碼被無效。PROC被忽略的SQL宏/宏中的SQL /變量
%MACRO PARAMETERS;
%GLOBAL FDMVAR1 FDMVAR2 UPBOUND LOBOUND GROUPVAR;
%LET FDMVAR1 ='31Mar2017:0:0:0'dt; /* Start Date */
%LET FDMVAR2 = '30Apr2017:0:0:0'dt; /* End Date */
%LET UPBOUND = .01;
%LET LOBOUND = -.01;
%LET GROUPVAR = 1;
PROC SQL;
CREATE TABLE MD_WRK.SUB_ID
(SUBSYS_ID char(6));
INSERT INTO MD_WRK.SUB_ID
VALUES('CBS')
VALUES('CDS')
VALUES('DDA')
VALUES('IMCOR')
VALUES('ODL')
VALUES('OEC')
VALUES('OEC2')
VALUES('SAV')
VALUES('PWRCDS')
VALUES('SMARTY')
VALUES('MRKTLN')
;
QUIT;
%MEND PARAMETERS;
您不要在代碼中的任何地方使用宏變量。我不明白這裏的問題是什麼,你沒有明確說明。請注意,當您像這樣在宏中創建宏變量時,它們使用本地SCOPE創建,因此它們不存在於宏之外。如果您需要在宏外使用它們,則需要將它們定義爲全局宏變量。 – Reeza
謝謝你Reeza。這是問題。我定義了局部變量而不是全局變量。我遇到的問題有兩個: 1)由於我只有本地變量,我的代碼引用宏失敗。由於該代碼失敗,它也不會輸出作爲該進程一部分的表MD_WRK.SUB_ID。這就是爲什麼看起來好像這個宏完全失敗了。它確實只是局部變量具有較大的下游影響。無論如何,謝謝你的幫助。我發佈了更新後的代碼。 –
很高興你的工作。但是對於您發佈的代碼,應該創建MD_WRK.SUB_ID,無論是否使用'%GLOBAL'語句。 – Quentin