2017-10-26 15 views
0

두 데이터 Set1 및 Set2가 있습니다.SAS에서 데이터 세트의 날짜가 다른 데이터 세트의 날짜 범위에 있는지 확인하는 방법

Set1과 데이터 세트는 열 Curr_Dt이 있습니다 -

Set1 
Curr_Dt 
23/04/1998 
01/01/2017 
01/12/2018 
10/10/2010 

Set2를 데이터 세트는 3 열 St_Dt, End_Dt, 공업

St_Dt    End_Dt    Ind 
    01/11/2018  31/12/2018    N 
    01/01/1998  31/05/1998    N 
    30/11/2016  02/02/2017    N 

나는 Y로 설정 Set2를 데이터의 공업 열을 업데이트 할있다 Set1의 Curr_Dt가 Set2의 St_Dt와 End_Dt 사이에있는 경우.

답변

0

병합 할 키가 여기에 표시되지 않으므로 첫 번째 행이 첫 번째 행과 각 데이터 집합 아래에 있다고 가정합니다.

간단한 데이터 단계로이를 수행 할 수 있습니다.

data want; 
merge set1 set2; 

if st_dt <= curr_dt <= end_dt then 
    ind = 'Y'; 
run; 

이것은 날짜가 문자열이 아닌 날짜로 저장된다고 가정합니다.

0

만들기 세트

data Set1; 
    length Curr_Dt $10; 
    input Curr_Dt; 
    cards; 
23/04/1998 
01/01/2017 
01/12/2018 
10/10/2010 
; 
run; 

data Set2; 
    length St_Dt $10 End_Dt $10 Ind $1; 
    input St_Dt$ End_Dt$ Ind$; 
    cards; 
01/11/2018 31/12/2018 N 
01/01/1998 31/05/1998 N 
30/11/2016 02/02/2017 N 
30/11/2005 02/02/2005 N 
run; 

설정 날짜 형식

data Set1; 
    set Set1; 
    Curr = input(Curr_Dt, ddmmyy10.); 
run; 

data Set2; 
    set Set2; 
    St = input(St_Dt, ddmmyy10.); 
    End = input(End_Dt, ddmmyy10.); 
run; 

설정 Y 플래그 경우 Set1에서 어떤Curr_Dt 폭포

proc sql; 
    create table Set2 as 
    select distinct St_Dt, End_Dt, 
    case when Set1.Curr>Set2.St and Set1.Curr<Set2.End 
    then 'Y' else 'N' end as Ind 
    from Set2 
    left join Set1 on Set1.Curr>Set2.St and Set1.Curr<Set2.End; 
run; 

St_Dt 사이 End_Dt 당신 얻을 수

01/01/1998 31/05/1998 Y 
30/11/2016 02/02/2017 Y 
01/11/2018 31/12/2018 Y 
30/11/2005 02/02/2005 N