2014-02-19 3 views
2

저는 SAS가 완전히 새롭습니다. 내 데이터베이스 2,000에서 2,011 사이에서 데이터가 내 데이터 세트 목록은 각 날짜에 대해이 같은 것입니다 : 나는이 날짜 이전 오십일 10 일 간의 데이터를 원하는이 20100510. 같은 숫자 날짜가SAS 매크로 날짜 문제

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

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

그러나 :

이에 대한 나의 코드는 것 같습니다.

제발 나를 위해 적절한 매크로 코드를 도와주세요.

감사합니다. 당신의 도움 메이트에 대한

답변

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); 
+0

감사합니다. 만약 내가 설정 한 yyyymmdd가 내 데이터 세트에 존재하지 않고 유효한 날짜 (또는 데이터 세트에 존재하는 날짜)로 만들기 위해 그것을 증가시키고 싶습니다. 데이터 세트에 존재하는 날짜로 만들기 위해 1 또는 2 정도 씩 증가시킵니다. 그리고, 또한 내 출력 데이터 세트에서 0 또는 1로, 0 (존재하지 않는 경우)과 1 (존재하는 경우)을 원합니다. 미리 감사드립니다 !! –

+0

잘 모르겠습니다. 완전히 이해합니다. 새로운 질문을 할 수 있습니까? 예를 들어 이상적으로 .. –

+0

나는 % yyyymmdd = 20020509를 정의한이 단일 날짜에 대해 잘 작동하는 코드를 가지고 있습니다. . 자, 나는 동일한 코드가 시작 범위와 끝 지점 사이의 기간 동안 작동하기를 바랍니다. 처음에 이것을 정의하여이 기간 동안 출력을 얻고 싶을 때 어떻게하면 좋을까요? 이 방법을 제안 해주세요. –

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 ;