SAS宏日期问题

SAS宏日期问题,sas,Sas,我是SAS的新手。 我的数据库有2000-2011年的数据,每个日期的数据集列表如下: 我有一个像20100510这样的数字日期。我希望数据在此日期20100510前50天到10天之间。有些日期可能会在50到10天之间丢失 我的代码如下所示: %let yyyymmdd=20090120; %let beg=intnx('day',date,-55); %let end=intnx('day',date,-10); data x; set QA.TP_&yyyymmdd QA

我是SAS的新手。 我的数据库有2000-2011年的数据,每个日期的数据集列表如下:

我有一个像20100510这样的数字日期。我希望数据在此日期20100510前50天到10天之间。有些日期可能会在50到10天之间丢失

我的代码如下所示:

%let yyyymmdd=20090120;

%let beg=intnx('day',date,-55);  
%let end=intnx('day',date,-10);  

data x;
set QA.TP_&yyyymmdd QA.TP_&beg-QA.TP_&end;
但这是行不通的


请为我提供合适的宏代码。

谢谢你的帮助。如果我设置的yyyymmdd在我的数据集中不存在,并且我想增加它以使其成为数据集中存在的一个或多个有效日期,该怎么办。将其递增1或2左右,使其成为数据集中存在的日期。而且,我希望在我的输出数据集中将其作为0或1,其中0如果不存在,1如果存在。提前感谢!!不确定我是否完全理解-你能作为一个新问题提问吗?理想情况下,举一个例子。我的意思是-你能不能用一个有效的例子,比如如果20020509不存在,你是向上递增还是向下递增,以及startrange和endrange值会发生什么情况等等,来创建一个关于Stackoverflow的新问题。。。如果你自己也尝试过这一点,这也会对我们双方都有帮助。只需在这个问题中使用宏:你需要将该宏的所有内容从%macro复制到%mend,并将其粘贴到上面程序的开头。然后将set QA.TP_u&yyyyymmdd替换为set%checkdsyyyymmdd=&yyyyymmdd,offset=0。请注意,您粘贴的宏需要修改以将PQ.CP_uuu更改为QA.TP_uuu。最后-如果我的答案是有用的-请考虑对他们中的一些投票! %let dt=20jan2009 ; %let beg=%SYSFUNC(intnx(day,"&DT"d,-50),8.); %let end=%SYSFUNC(intnx(day,"&DT"d,-10),8.); /* Use dictionary tables to get all the relevant datasets */ proc sql ; select catx('.',libname,memname) into :MEMLIST separated by ' ' from dictionary.tables where libname = 'WORK' and memname like 'TP_%' and input(scan(memname,-1,'_'),yymmdd8.) between &BEG and &END order by memname ; quit ; /* Then read all the datasets in... */ data big ; set &MEMLIST ; run ; %let dt=20jan2009 ; %let beg=%SYSFUNC(intnx(day,"&DT"d,-50),8.); %let end=%SYSFUNC(intnx(day,"&DT"d,-10),8.); /* Use dictionary tables to get all the relevant datasets */ proc sql ; select catx('.',libname,memname) into :MEMLIST separated by ' ' from dictionary.tables where libname = 'WORK' and memname like 'TP_%' and input(scan(memname,-1,'_'),yymmdd8.) between &BEG and &END order by memname ; quit ; /* Then read all the datasets in... */ data big ; set &MEMLIST ; run ;
%let yyyymmdd=20090120;

%macro loop(yyyymmdd=, startrange=, endrange=);
%local date x ds;
%let date=%sysfunc(mdy(%substr(&yyyymmdd,5,2)
                      ,%substr(&yyyymmdd,7,2)
                      ,%substr(&yyyymmdd,1,4)));
data x;
set QA.TP_&yyyymmdd
/* loop through each specific dataset, checking first whether it exists.. */
%do x=&startrange %to &endrange;
   %let ds=QA.TP_%sysfunc(intnx(day,&date,&x),yymmddn8.);
   %if %sysfunc(exist( &ds )) %then %do;
      &ds
   %end;
%end;
;
run;
%mend; 

%loop(yyyymmdd=&yyyymmdd, startrange=-55, endrange=-10);