2017-10-26 5 views
0

Ich habe zwei Datensätze Set1 und Set2.In SAS, wie zu prüfen, ob das Datum in einem Datensatz im Bereich von Daten in einem anderen Datensatz existiert

Set1 Datensatz hat Spalte Curr_Dt: -

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

Set2 Datensatz hat 3 Spalten St_Dt, End_Dt, Ind

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 

Ich möchte die Ind Spalte von Set2 Daten auf Y gesetzt aktualisieren wenn Curr_Dt von Set1 zwischen St_Dt und End_Dt von Set2 fällt.

Antwort

0

Ich sehe keinen Schlüssel hier, um durch zu verschmelzen, also gehe ich davon aus, dass die erste Zeile mit der ersten Zeile und so mit jedem Datensatz geht.

Sie können dies mit einem einfachen Datenschritt tun.

data want; 
merge set1 set2; 

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

Dies setzt auch voraus, dass die Daten als Daten und nicht als Zeichenfolgen gespeichert werden.

0

Create setzt

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; 

Set Datumsformate

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; 

Set Y-Flag, wenn jedeCurr_Dt von Set1 fällt zwischen St_Dt und End_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; 

Sie get

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 
Verwandte Themen