我是SAS的中间用户,但我对数组和宏的了解有限。我有一组代码,提示用户输入日期范围。例如,用户可能会进入2015年12月1日 - 2015年12月5日。为简单起见,想象代码如下:
data new; set old;
if x1='December 1, 2015'd then y="TRUE";
run;
我需要在日期提示范围内每天运行相同的代码,因此对于第1,第2,第3,第4和第5。我的想法是创建一个包含日期的数组,但我不确定如何做到这一点。我的第二个想法是创建一个宏,但我无法弄清楚通过宏提供列表。
另外,仅供参考,代码比数据步骤更长,更复杂。
答案 0 :(得分:1)
以下宏可用作代码的框架:
%MACRO test(startDate, endDAte);
%DO i=&startDate %to &endate;
/* data steps go here */
/* example */
DATA test;
SET table;
IF x1 = &i THEN y = "true";
RUN;
%END;
%MEND;
答案 1 :(得分:0)
调用调用execute来调用你的宏,使用do循环调用数据 null 步骤循环遍历这些日子。为调用执行获取正确的字符串有时可能很棘手,但值得整体努力。
data sample;
do date='01Jan2014'd to '31Jan2014'd;
output;
end;
run;
%macro print_date(date);
proc print data=sample;
where date="&date"d;
format date date9.;
run;
%mend;
%let date_start=05Jan2014;
%let date_end=11Jan2014;
data _null_;
do date1="&date_start"d to "&date_end"d by 1;
str='%print_date('||put(date1, date9.)||');';
call execute(str);
end;
run;