我試圖編寫健壯的代碼來爲宏變量賦值。我希望宏變量的名稱取決於來自變量「子組」的值。因此,小組可以等於1,2或45等,因此具有宏變量名稱trta_1,trta_2,trt_45等。如何在宏變量名稱中使用%SCAN?
我遇到困難的地方是調用宏變量名稱。因此,不要打電話給& trta_1我想調用& trta_%SCAN(&子組,& k),它在第一次迭代時解析爲trta_1。我在宏變量名稱中使用了%SCAN函數,該函數拋出警告'WARNING:明顯的符號引用TRTA_未解決。'。但是,宏變量已使用賦值分配。
如何解決警告?有沒有我可以用%SCAN函數運行的函數來實現這個功能?
data data1 ;
input subgroup trta trtb ;
datalines ;
1 30 58
2 120 450
3 670 3
run;
%LET subgroups = 1 2 3 ;
%PUT &subgroups;
%MACRO test;
%DO k=1 %TO 3;
DATA test_&k;
SET data1;
WHERE subgroup = %SCAN(&subgroups, &k);
CALL SYMPUTX("TRTA_%SCAN(&subgroups, &k)", trta, 'G');
CALL SYMPUTX("TRTB_%SCAN(&subgroups, &k)", trtb, 'G');
RUN;
%PUT "&TRTA_%SCAN(&subgroups, &k)" "&TRTB_%SCAN(&subgroups, &k)";
%END;
%MEND test;
%test;
你已經在你的宏中使用過&子組,但是'&subtest'在外? – DTS 2014-09-10 12:53:26
@dennis suter嗯,是的,我正在測試它,忘了改回來,謝謝!現在更新了。 – Dawnoak 2014-09-10 13:05:00