mengekstraksi dari kumpulan data menggunakan kumpulan data lain di SAS

Saya memiliki kumpulan data berikut FULLDS

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

Saya memiliki kumpulan data NewDS lainnya

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

Saya hanya ingin menyimpan data dalam FULLDS yang cocok dengan yang ada di NewDS dan hanya antara tanggal mulai dan akhir

Bantuan apa pun sangat dihargai. Terima kasih!


person qfd    schedule 31.01.2014    source sumber


Jawaban (2)


Anda dapat melakukan ini menggunakan proc sql. Berikut ini menarik data menggunakan pilihan:

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

Anda sebenarnya dapat menghapus baris yang tidak cocok dengan melakukan:

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
Catatan, ini hanya akan berfungsi jika itu benar-benar tanggal, dan bukan hanya string yang menyimpan nilai seperti tanggal. Anda perlu menambahkan beberapa pernyataan input jika tidak. - person Joe; 01.02.2014

Cara yang lebih cepat untuk melakukan ini (dan juga cara yang SASsy) adalah dengan menggunakan format.

Ambil NewDS, buat kumpulan data baru berdasarkan yang disebut fmts atau semacamnya, dan ganti nama variabel menjadi start dan end, buat variabel label dengan nilai 'VALID', dan ganti nama ID menjadi fmtname.

Kemudian proc format cntlin=fmts; quit; (fmts = nama dataset yang Anda buat di atas).

Kemudian Anda menggunakan putn seperti:

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

Ini mengasumsikan semua variabel tanggal (di kedua kumpulan data) benar-benar merupakan nilai tanggal, dan bukan variabel karakter. Jika ya, maka start, end, dan nilai yang dimasukkan ke dalam putn semuanya harus input hingga tanggal.

person Joe    schedule 01.02.2014