SAS宏以获取所需范围的输出
我是SAS的新手。请帮忙回答我的问题。 在我定义的某个日期,我的代码可以正常工作SAS宏以获取所需范围的输出,sas,Sas,我是SAS的新手。请帮忙回答我的问题。 在我定义的某个日期,我的代码可以正常工作 %let yyyymmdd= 20020509; data x; set PQ.CP_&yyyymmdd 然后是获得所需输出的条件 现在,我希望我的代码在yyyymmdd之前的startrange=-50天和yyyymmdd之前的endrange=-10天之间工作。我如何在开始时定义它,以获得这段时间的输出,因为我想进一步使用它。请给我一个建议 好的-我是在你的上下文中回答这个问题的-要解决当前的问题
%let yyyymmdd= 20020509;
data x;
set PQ.CP_&yyyymmdd
然后是获得所需输出的条件
现在,我希望我的代码在yyyymmdd之前的startrange=-50天和yyyymmdd之前的endrange=-10天之间工作。我如何在开始时定义它,以获得这段时间的输出,因为我想进一步使用它。请给我一个建议 好的-我是在你的上下文中回答这个问题的-要解决当前的问题,请忽略下面的“内部循环”:
%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);
谢谢,但是我得到了这个错误:%SYSFUNC或%QSYSFUNC宏函数引用的函数INTNX的参数3不是一个数字。谢谢,它工作得很好,但现在我还有两个疑问。如果您觉得我的问题很蹩脚,很抱歉,但我如何将问题中提到的代码用于您的问题。更清楚地说,假设%let yymmdd=20020509和%let new=startrange to endrange。我的代码在yymmdd中运行良好,我得到了输出。在我的最终声明中,仅通过将&yymmdd更改为&new,如何获得输出。谢谢你的指导和帮助!我认为如果你能提供一个(或两个)你期望的输出(对于给定的输入)的例子,你的问题会有很大的改进(并且更容易回答)。具体来说,您希望在set语句中看到哪些数据集?有多少输出数据集?好的,我理解你的观点,但请回答这个简单的问题。你的循环代码和我的过滤器配合得很好;设置和;空白处应该有什么?我试过使用end range、startrange、ds1等,但不起作用。我没有使用内部循环。