2016-07-22 36 views
3

我有以下两个数据集。 我想删除从A与日期的进出时段内落在文件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,他的第一个视频会在01JAN04-04JAN04之内,因此我删除了这个视频,但保留其余部分。

从本质上讲,我应该得到以下结果

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段之间是不必总是不变的。

我认为在R中,我大概可以通过A中的行编写一个循环,从B中找出与ID匹配的列表,然后从B中循环查看该列表中的日期,看看A中的日期是否属于in-期间。

但我需要在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

相关问题