我有以下两个数据集。 我想删除A中的行,其中日期属于文件B中的输入输出期间。
档案A
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中的日期是否属于中间的周期。
但是我需要在SAS中这样做,所以我真的不知道从哪里开始。我如何在SAS中逐行循环? 例如。我应该写一个循环遍历两个文件的宏如何?或以某种方式使用SQL?
我非常感谢有关如何解决这个问题的一些建议。 谢谢!
答案 0 :(得分: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;