所以我有这个宏: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次来获得结果,我想一次运行所有这些,而不必每次都填写参数。
有人能指出我如何设置它的方向吗?
谢谢!
答案 0 :(得分:1)
这假设您的参数值始终存在于数据中。如果您可以将数据集下移到refs/marks/123/456/789
和yearmonth
的每个独特组合(我的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(¶m1,%str( )));
%let thisparam1=%scan(¶m1,&i,%str( ));
%let thisparam2=%scan(¶m2,&i,%str( ));
%put &thisparam1 &thisparam2;
%stab_index(&thisparam1,&thisparam2);
%end;
%mend loop;
%loop;
首先需要定义参数列表(我在这里称它们为param1& param2)。
然后你可以从1循环到单词数,并从列表中检索第i个参数,并在你的stab_index宏中使用它。
如果参数包含空格,您可以使用除列表空格之外的另一个分隔符,并使用countw函数中的第二个参数(
%sysfunc(countw(¶m1,'-'))
)和扫描函数中的第三个参数({{ 1}})。