我是SAS的新手。请帮助我查询。 我的代码在我定义的单个日期工作正常
%let yyyymmdd= 20020509;
data x;
set PQ.CP_&yyyymmdd
然后获得所需输出的条件。
现在,我希望我的相同代码能够在yyyymmdd之前的startrange = -50天和yyyymmdd之前的endrange = -10天之间工作。我如何在开始时定义它以获得此期间的输出,因为我想进一步使用它。请建议我这样做的方法。
答案 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);