2016-07-22 2 views
3

私は以下の2つのデータセットを持っています。 私は、ファイルBのイン・アウト期間SAS - 別のファイルの中間の期間に基づいてファイルから行を削除する

ファイル

SEQ ID date var1 
1 A12 03JAN04 242 
2 A12 01FEB06 356 
3 A12 06JAN08 325 
4 A12 28DEC09 123 
5 B34 06MAY03 985 
6 B34 13JUN03 198 
7 B34 10MAY05 241 
8 C56 09NOV10 155 
9 C56 19OCT13 352 

ファイルBについては

ID date_in date_out 
A12 01JAN04 04JAN04 
A12 05FEB08 08FEB08 
B34 03MAY03 06MAY03 
B34 09MAY05 19MAY05 
C56 12JUL12 18JUL12 

に収まる日付でから行を削除したいですたとえば、ID = A12の場合、彼の最初のobsは01JAN04-04JAN04の範囲内にあるため、obsを削除しますが、残りの部分は保持します。

基本的に、私は次のような結果

SEQ ID date var1 
2 A12 01FEB06 356 
3 A12 06JAN08 325 
4 A12 28DEC09 123 
6 B34 13JUN03 198 
8 C56 09NOV10 155 
9 C56 19OCT13 352 

両方のファイルAを取得する必要がありますし、BはIDごとに複数のレコードを持っており、ファイルB内でのアウト期間の間なかれ一定ではありません。

私はおそらく、Aのラインを通ってループを書くことができ、IDと一致するBのリストをサブセット化してから、Bのリストをループします。Aの日付が、期間の間。

しかし、これはSASで必要なので、どこから始めたらいいのか分かりません。 SASでラインごとにどのようにループするのですか?例えば、 。私は両方のファイルをいくつかの方法でループするマクロを書く必要がありますか?何とかSQLを使用しますか?

この問題にどう対処するかに関するアドバイスをいただければ幸いです。 ありがとう!

答えて

2

PROC SQLは簡単にそのの世話をする...

proc sql; 
    create table bad_seqs as 
    select A.SEQ 
     from A 
     left join B 
      on A.ID = B.ID 
     where A.date between B.date_in and B.date_out; 

    delete from A where SEQ in (select SEQ from bad_seqs); 
quit; 
+0

非常にエレガントなソリューションを!ありがとう! – btiger

関連する問題