2017-10-26 9 views
0

私は2つのデータセットSet1とSet2を持っています。SASでは、データセット内の日付が別のデータセット内の日付の範囲に存在するかどうかをチェックする方法

セット1データセットは、列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

Set1から任意のCurr_DtSt_DtEnd_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; 

あなたが間に入る場合はセットに

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フラグを作成します。取得する

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 
関連する問題