一次使用不同的参数多次运行宏

时间:2017-02-08 09:24:36

标签: sas sas-macro

所以我有这个宏:stab_index(yearmonth,period)

假设我必须使用不同的参数运行5次(可能更多),例如

 %stab_index(201601,01/2016);
 %stab_index(201602,02/2016);
 %stab_index(201603,03/2016);
 %stab_index(201604,04/2016);
 %stab_index(201605,05/2016);

为了生成足够的数据集来运行另一个宏:Stab_Ind_DYNAMICS

但是我不想运行6次来获得结果,我想一次运行所有这些,而不必每次都填写参数。

有人能指出我如何设置它的方向吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

这假设您的参数值始终存在于数据中。如果您可以将数据集下移到refs/marks/123/456/789yearmonth的每个独特组合(我的period数据集如何在下面看),那么您不需要输入任何内容,只需让数据做可以适应不断变化的数据的工作:

unique

答案 1 :(得分:0)

您可以使用另一个循环通过参数列表的宏来实现此目的。

%let param1 = 201601 201602 201603 201604 201605;
%let param2 = 01/2016 02/2016 03/2016 04/2016 05/2016;
%macro loop();
    %do i=1 %to %sysfunc(countw(&param1,%str( )));
        %let thisparam1=%scan(&param1,&i,%str( ));
        %let thisparam2=%scan(&param2,&i,%str( ));
        %put &thisparam1 &thisparam2;
        %stab_index(&thisparam1,&thisparam2);
    %end;
%mend loop;
%loop;

首先需要定义参数列表(我在这里称它们为param1& param2)。

然后你可以从1循环到单词数,并从列表中检索第i个参数,并在你的stab_index宏中使用它。

  

如果参数包含空格,您可以使用除列表空格之外的另一个分隔符,并使用countw函数中的第二个参数(%sysfunc(countw(&param1,'-')))和扫描函数中的第三个参数({{ 1}})。