呼啦一陣風(fēng)
2019-11-20 12:35:32
當(dāng)作為SAS程序運(yùn)行時(shí),此代碼可以正常執(zhí)行:%MyMacro(foo_val, bar_val, bat_val);我使用以下方法創(chuàng)建了一個(gè)表:DATA analyses; input title : $32. weight : $32. response : $32.; datalines;foo1 bar1 bat1foo2 bar2 bat2;我想對(duì)表的MyMacro每一行執(zhí)行一次analyses。下面的代碼似乎只傳遞字符串值title,weight和response(而不是數(shù)據(jù)值foo1等),以我的宏(通過(guò)調(diào)用測(cè)試%put命令):DATA _NULL_ ; set analyses; %MyMacro(title, weight, response);RUN;analyses在將數(shù)據(jù)值作為參數(shù)傳遞給宏時(shí),如何在表的每個(gè)記錄中調(diào)用一次宏?目的是針對(duì)大量分析實(shí)際運(yùn)行此操作,因此解決方案必須適當(dāng)?shù)財(cái)U(kuò)展到analyses表中的更多記錄。
3 回答

慕少森
TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
您可以將變量值放入宏變量,然后%MyMacro使用宏變量作為參數(shù)多次調(diào)用(數(shù)據(jù)集中的obs數(shù)):
資料:
DATA analyses;
input title : $32. weight : $32. response : $32.;
datalines;
foo1 bar1 bat1
foo2 bar2 bat2
;
run;
運(yùn)行宏的代碼:
data _NULL_;
set analyses end=fine;
call symput("ARGUMENT"||compress(_N_),catx(",",title,weight,response));
if fine then call symput("NLOOPS",compress(_N_));
run;
%*PUT &ARGUMENT1;
%*PUT &ARGUMENT2;
%MACRO MAIN;
%DO L=1 %TO &NLOOPS;
%MyMacro(&&ARGUMENT&L);
%END;
%MEND;
%MAIN;
- 3 回答
- 0 關(guān)注
- 915 瀏覽
添加回答
舉報(bào)
0/150
提交
取消