SAS宏日期问题

时间:2014-02-19 14:47:27

标签: sas

我是SAS的新手。 我的数据库有2000 - 2011年的数据,我的数据集列表对于每个日期都是这样的:

TP_2004012   for 26JAN2004  
TP_20040127  for 27JAN2004  
TP_20040128  for 28JAN2004

我有一个类似于20100510的数字日期。我想要在此日期之前50天到10天之间的数据(20100510)。有些日期可能会在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;

但是,这不起作用。

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

谢谢!

2 个答案:

答案 0 :(得分:1)

%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);

答案 1 :(得分:0)

%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 ;