我有一个SAS数据集值传递SAS数据集列作为宏参数
yyyymm
201605
201606
201607
201608
201609
我试图找到一种方法同时通过这些值一个宏,使得
do while dataset still has value
%macro passdata(yyyymm);
end
我如何在SAS中做到这一点。有人可以帮助一个示例/代码片段。
我有一个SAS数据集值传递SAS数据集列作为宏参数
yyyymm
201605
201606
201607
201608
201609
我试图找到一种方法同时通过这些值一个宏,使得
do while dataset still has value
%macro passdata(yyyymm);
end
我如何在SAS中做到这一点。有人可以帮助一个示例/代码片段。
试试这个例子,尝试修改,以满足您的需求......从“源”数据集,我们可以使用呼叫symput()将宏令牌分配给每个观测(由SAS自动数据集变量ň如此分化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;
正如先前评论中提及,一个方式来传递参数是通过调用执行程序。请注意,这必须在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;
你在上面做什么听起来更像是你不需要一个宏,只需要一个正常的数据步骤。 '数据要;设置your_dataset;运行;'看起来就是这样。你能解释一下为什么这不适合你的需求?什么是'%passdata'在做什么? – Joe
看看CALL EXECUTE。该文档可能正好是你正在寻找的样本,否则,这里是一个完整的代码示例https://gist.github.com/statgeek/beb97b1c6d4517dde3b2 – Reeza