gpt4 book ai didi

sas - 少对多合并?

转载 作者:行者123 更新时间:2023-12-04 05:53:36 26 4
gpt4 key购买 nike

我有两个数据集需要合并。

第一个是一个大数据集 学习ID 放电 (患者出院的日期)。

第二个是比第一个更少的观察。他们有两列:学习ID call_mad (出院日期后护士调用病人的日期)。 并非所有出院者都会接到护士的电话。

第一个表是

STUDYID DISCHARG 

10011 2008-10-29

10011 2008-11-7

10011 2008-11-18

10011 2009-10-17

10011 2010-1-2

10011 2010-1-22

第二张表是
 STUDYID        CALL_MAD

10011 2009-10-19
10011 2010-1-25

我想要的决赛 table
STUDYID   DISCHARG      CALL_MAD

10011 2008-10-29

10011 2008-11-7

10011 2008-11-18

10011 2009-10-17 2009-10-19

10011 2010-1-2

10011 2010-1-22 2010-1-25

希望很清楚。提前致谢。

最佳答案

我和 thelatemail 有相同的想法,即您首先提取最新的 DISCHARG 日期,即 <(或可能 <=)每个 CALL_MAD 日期,然后将该数据合并回原始数据集。我认为这是使用结构化数据所能做的最好的事情,尽管这种逻辑有可能会崩溃(例如,如果护士的电话与最近的出院无关)。理想情况下,您希望将 DISCHARG 日期列作为辅助键添加到第二个表中,以便在不做任何假设的情况下轻松加入 STUDYID 和 DISCHARG 日期。

无论如何,这里是我使用的代码。

data ds1;
input STUDYID DISCHARG :yymmdd10.;
format DISCHARG yymmdd10.;
datalines;
10011 2008-10-29
10011 2008-11-7
10011 2008-11-18
10011 2009-10-17
10011 2010-1-2
10011 2010-1-22
;
run;

data ds2;
input STUDYID CALL_MAD :yymmdd10.;
format CALL_MAD yymmdd10.;
datalines;
10011 2009-10-19
10011 2010-1-25
;
run;

proc sql;
create table ds3 as select
ds1.*,
ds2.call_mad
from ds1 inner join ds2 on ds1.studyid=ds2.studyid and ds2.call_mad>ds1.discharg
group by ds1.studyid,ds2.call_mad
having ds1.discharg=max(ds1.discharg);

create table want as select
ds1.*,
ds3.call_mad
from ds1 left join ds3 on ds1.studyid=ds3.studyid and ds1.discharg=ds3.discharg;
quit;

关于sas - 少对多合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777404/

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