从SAS数据步骤动态调用宏

当作为SAS程序运行时,此代码可以正常执行:


%MyMacro(foo_val, bar_val, bat_val);


我使用以下方法创建了一个表:


DATA analyses;

   input title : $32. weight : $32. response : $32.;

   datalines;

foo1 bar1 bat1

foo2 bar2 bat2

;

我想对表的MyMacro每一行执行一次analyses。


下面的代码似乎只传递字符串值title,weight和response(而不是数据值foo1等),以我的宏(通过调用测试%put命令):


DATA _NULL_ ;

    set analyses;

    %MyMacro(title, weight, response);


RUN;

analyses在将数据值作为参数传递给宏时,如何在表的每个记录中调用一次宏?目的是针对大量分析实际运行此操作,因此解决方案必须适当地扩展到analyses表中的更多记录。


呼啦一阵风
浏览 820回答 3
3回答

慕少森

您可以将变量值放入宏变量,然后%MyMacro使用宏变量作为参数多次调用(数据集中的obs数):资料:DATA analyses;   input title : $32. weight : $32. response : $32.;   datalines;foo1 bar1 bat1foo2 bar2 bat2;run;运行宏的代码: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;
打开App,查看更多内容
随时随地看视频慕课网APP