[英]Passing SAS dataset column as macro parameter
我有一个带有值的SAS数据集
yyyymm
201605
201606
201607
201608
201609
我试图找到一种方法一次将这些值传递给宏,这样
do while dataset still has value
%macro passdata(yyyymm);
end
如何在SAS中执行此操作。 有人可以帮忙提供示例代码段吗?
如先前的评论所述,传递参数的方法是通过调用执行例程。 请注意,这必须在datastep环境中完成。 这些行是从您输入的集中读取的。
您可以输入多个变量。 只需在“ ||”中添加更多变量 分隔符。 请注意,变量中可能包含很多空格。 (==请谨慎进行比较。)
这是一个小的示例代码。 测试。
data start_data;
input date_var ;
datalines;
201605
201606
201607
201608
201609
;
run;
%macro Do_stuff(input_var);
%put 'Line generates value ' &input_var;
%mend do_stuff;
data _null_;
set start_data;
call execute('%do_stuff('||date_var||')' );
run;
尝试此示例,然后尝试进行修改以满足您的需求...从“源”数据集中,我们可以使用调用symput()为每个观测值分配一个宏令牌(由SAS自动数据集变量n区分,因此为My_token1,My_token2等)。 )一旦定义了一组宏变量,就循环遍历它们! 该程序会将所有单独的记录从源打印到SAS日志:
data source;
do var=1000 to 1010;
output;
end;
run;
data _null_;
set source;
call symput(compress("My_token"||_n_),var);
run;
%put &my_token1 &my_token4;
%Macro neat;
%do this=1 %to 11;
*Check the log.;
%put &&My_token&this;
%end;
%mend;
%neat;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.