为了账号安全,请及时绑定邮箱和手机立即绑定

从SAS数据步骤动态调用宏

从SAS数据步骤动态调用宏

呼啦一阵风 2019-11-20 12:35:32
当作为SAS程序运行时,此代码可以正常执行:%MyMacro(foo_val, bar_val, bat_val);我使用以下方法创建了一个表:DATA analyses;   input title : $32. weight : $32. response : $32.;   datalines;foo1 bar1 bat1foo2 bar2 bat2;我想对表的MyMacro每一行执行一次analyses。下面的代码似乎只传递字符串值title,weight和response(而不是数据值foo1等),以我的宏(通过调用测试%put命令):DATA _NULL_ ;    set analyses;    %MyMacro(title, weight, response);RUN;analyses在将数据值作为参数传递给宏时,如何在表的每个记录中调用一次宏?目的是针对大量分析实际运行此操作,因此解决方案必须适当地扩展到analyses表中的更多记录。
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

您可以将变量值放入宏变量,然后%MyMacro使用宏变量作为参数多次调用(数据集中的obs数):


资料:


DATA analyses;

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

   datalines;

foo1 bar1 bat1

foo2 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;


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 815 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信