SAS宏以获得所需范围的输出

时间:2014-02-20 08:34:00

标签: sas

我是SAS的新手。请帮助我查询。 我的代码在我定义的单个日期工作正常

%let yyyymmdd= 20020509; 
data x;
set PQ.CP_&yyyymmdd 

然后获得所需输出的条件。

现在,我希望我的相同代码能够在yyyymmdd之前的startrange = -50天和yyyymmdd之前的endrange = -10天之间工作。我如何在开始时定义它以获得此期间的输出,因为我想进一步使用它。请建议我这样做的方法。

1 个答案:

答案 0 :(得分:1)

好的 - 我在previous question的背景下回答这个问题 - 只解决当前的问题,忽略下面的'内循环':

%macro loop(yyyymmdd=, startrange=, endrange=);
%local date x ds1 ds2 y;
%let date=%sysfunc(mdy(%substr(&yyyymmdd,5,2)
                      ,%substr(&yyyymmdd,7,2)
                      ,%substr(&yyyymmdd,1,4)));

/* this outer loop answers the curent question */
%do x=&startrange %to &endrange;
   %let ds1=PQ.CP_%sysfunc(intnx(day,&date,&x),yymmddn8.);
   %if %sysfunc(exist( &ds1 )) %then %do;
      data x_%sysfunc(intnx(day,&date,&x),yymmddn8.);
      set &ds1
      /* this inner loop answers your previous question - remove if necessary */
      %do y=-55 %to -10;
         /* next date range is 55 to 10 days BEFORE the current iterative*/
         /* value of (startrange-endrange) */
         %let ds2=QA.TP_%sysfunc(intnx(day,&date,%eval(&y+&x)),yymmddn8.);
         %if %sysfunc(exist( &ds2 )) %then %do;
            &ds2
         %end;
      %end;
      /* inner loop end */
      ;run;
   %end;
%end;
/* outer loop end */
%mend; 

%loop(yyyymmdd=20020509, startrange=-50, endrange=-10);