Sql 在另一列满足条件的第一个日期合并
我有两个数据集,我正试图合并它们以获得我感兴趣的新变量 第一个数据集,Sql 在另一列满足条件的第一个日期合并,sql,proc-sql,Sql,Proc Sql,我有两个数据集,我正试图合并它们以获得我感兴趣的新变量 第一个数据集,data1,每个ID有一行。 第二个是data2,每个ID有许多行(日期),如下所示: ID | Date | Code1 | Code2 | Code3 | Payment 01 | 01/01/2020 | AA | AA | AA | 1 01 | 02/01/2020 | AA | AA | AA | 1 01 | 03/01/2020 | AA | AA |
data1
,每个ID有一行。
第二个是data2
,每个ID有许多行(日期),如下所示:
ID | Date | Code1 | Code2 | Code3 | Payment
01 | 01/01/2020 | AA | AA | AA | 1
01 | 02/01/2020 | AA | AA | AA | 1
01 | 03/01/2020 | AA | AA | AA | 1
01 | 12/02/2020 | AA | AA | AA | 2
01 | 13/02/2020 | BB | AA | AA | 2
01 | 14/01/2020 | BB | AA | AA | 2
01 | 15/01/2020 | CC | BB | AA | 2
02 | 03/01/2020 | . | . | . | 1
02 | 04/01/2020 | AA | . | . | 1
02 | 05/01/2020 | AA | . | . | 1
02 | 06/01/2020 | CC | AA | . | 1
02 | 07/01/2020 | CC | AA | . | 1
03 | 20/03/2020 | AA | AA | . | 2
03 | 21/03/2020 | AA | AA | . | 3
我想合并它们,这样我就得到了data1
中的所有列,我得到了两个新列:position
和date
,这两个列的第一个日期是code1
,code2
或code3
获得BB或CC或payment
,每个ID大于或等于3
基本上,在这种情况下,结果应该是:
ID | Var1 | Date | Position
01 | 1 | 13/02/2020 | code
02 | 2 | 06/01/2020 | code
03 | 3 | 21/03/2020 | payment
Var1
只是data1
这是我尝试过的代码,但它没有正常工作。我肯定有一个细节错了,但我不知道是什么
proc sql;
create table new as
select a.*
, b.position
from data1 a
left join (select distinct id
, datestamp format=ddmmyy10.
, case when whichc("AA", code1, code2, code3) > 0 then "code"
when whichc("BB", code1, code2, code3) > 0 then "code"
when payment >= 3 then "payment" else . end as position
from data2
group by id
having datestamp=min(datestamp)) b
on a.id = b.id;
quit;
有什么办法可以让这一切顺利进行吗