แยกออกจากชุดข้อมูลโดยใช้ชุดข้อมูลอื่นใน SAS

ฉันมีชุดข้อมูล FULLDS ต่อไปนี้

 id  date         value
 A  "05/31/2000"   10
 B  "06/31/2000"    11

ฉันมีชุดข้อมูล NewDS อีกชุดหนึ่งซึ่งก็คือ

id  startdate enddate
A   "04/30/2000"  "05/31/2002"
etc

ฉันต้องการเก็บข้อมูลไว้ใน FULLDS ที่ตรงกันตามใน NewDS และอยู่ระหว่างวันที่เริ่มต้นและสิ้นสุดเท่านั้น

ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก ขอบคุณ!


person qfd    schedule 31.01.2014    source แหล่งที่มา


คำตอบ (2)


คุณสามารถทำได้โดยใช้ proc sql ต่อไปนี้จะดึงข้อมูลโดยใช้การเลือก:

proc sql;
    select f.*
    from FULLDS f join
         NewDS n
         on f.id = n.id and f.date between n.startdate and n.enddate;

คุณสามารถลบแถวที่ไม่ตรงกันได้โดยทำดังนี้

proc sql;
    delete from f
        where not exists (select 1
                          from NewDs n
                          where f.id = n.id and f.date between n.startdate and n.enddate
                         ) ;
person Gordon Linoff    schedule 31.01.2014
comment
โปรดทราบว่าการดำเนินการนี้จะใช้ได้เฉพาะในกรณีที่เป็นวันที่จริง และไม่ใช่แค่สตริงที่เก็บค่าเหมือนวันที่ คุณจะต้องเพิ่มคำสั่ง input บางส่วนหากไม่ใช่ - person Joe; 01.02.2014

วิธีที่เร็วกว่าในการทำเช่นนี้ (เช่นเดียวกับวิธี SASsy) คือการใช้รูปแบบ

ใช้ NewDS สร้างชุดข้อมูลใหม่โดยใช้ชื่อ fmts หรือบางอย่าง แล้วเปลี่ยนชื่อตัวแปรเป็น start และ end สร้างตัวแปร label ด้วยค่า 'VALID' และเปลี่ยนชื่อ ID เป็น fmtname

จากนั้น proc format cntlin=fmts; quit; (fmts = ชื่อของชุดข้อมูลของคุณที่สร้างไว้ด้านบน)

จากนั้นคุณใช้ putn เช่นนั้น:

data want;
set fullds;
if putn(date,id) = 'VALID';
run;

โดยถือว่าตัวแปรวันที่ทั้งหมด (ในชุดข้อมูลทั้งสองชุด) เป็นค่าวันที่จริง ไม่ใช่ตัวแปรอักขระ หากเป็นเช่นนั้น start, end และค่าที่จะใส่จะต้องเป็น input จนถึงวันที่

person Joe    schedule 01.02.2014