在一系列日期中每天运行SAS宏

时间:2014-12-09 22:10:53

标签: sas

我是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。我的想法是创建一个包含日期的数组,但我不确定如何做到这一点。我的第二个想法是创建一个宏,但我无法弄清楚通过宏提供列表。

另外,仅供参考,代码比数据步骤更长,更复杂。

2 个答案:

答案 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;