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;
有什么办法可以让这一切顺利进行吗