我是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;
但是,这不起作用。
请为我提供合适的宏代码。
谢谢!
答案 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 ;