gpt4 book ai didi

SAS - 根据另一个文件的中间周期从文件中删除行

转载 作者:行者123 更新时间:2023-12-02 01:23:34 25 4
gpt4 key购买 nike

我有以下两个数据集。我想从 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,他的第一个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文件中的in-out周期并不总是恒定的。

我认为在 R 中,我可能可以编写一个遍历 A 中的行的循环,从 B 中提取一个与 ID 匹配的列表,然后循环遍历 B 中的那个句点列表,看看 A 中的日期是否在两者之间期间。

但我需要在 SAS 中执行此操作,所以我真的不知道从哪里开始。我什至如何在 SAS 中逐行循环?例如。我应该写一个循环遍历这两个文件的宏吗?或者以某种方式使用 SQL?

我将不胜感激有关如何解决此问题的建议。谢谢!

最佳答案

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;

关于SAS - 根据另一个文件的中间周期从文件中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38534963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com