[英]Join two tables together based on similar but not equal columns in SAS
我正在尝试将这两个表连接在一起。 我希望这些列与表“enroll”中的列“患者”与表“日历”中的列“患者 ID”匹配的位置对齐。 “患者”和“患者 ID”相似但不相等。 此外,表“enroll”中的“dateassigned”列应与表“calendar”中的“datetracked”列匹配。 由于这只是较大数据集的片段,因此列应对齐在一起。 但是,在较大的数据集中可能并非如此,因此我试图突出显示两个表中的列未对齐的位置。 先感谢您。
我当前的工作代码给了我
错误:变量患者已被定义为字符和数字。
data enroll;
input patient status :$12. dateassigned &:anydtdte.;
format date yymmdd10.;
datalines;
500-001 enrolled 01-jan-2019
500-002 enrolled 15-jan-2019
500-003 removed 23-Jan-2019
500-004 enrolled 05-feb-2019
500-005 enrolled 17-feb-2019
587-001 enrolled 20-feb-2019
587-002 enrolled 25-feb-2019
587-003 enrolled 03-mar-2019
594-001 enrolled 04-feb-2018
594-002 enrolled 09-feb-2018
648-001 enrolled 15-mar-2019
648-002 enrolled 22-mar-2019
648-003 enrolled 27-mar-2019
648-004 enrolled 30-mar-2019
;
data calendar;
input visitnumber patientID :$12. datetracked &:anydtdte.;
format date yymmdd10.;
datalines;
500 500-001-rdf 01-jan-2019
500 500-002-fgh 15-jan-2019
500 500-003-ehd 23-Jan-2019
500 500-004-ern 05-feb-2019
500 500-005-qmd 17-feb-2019
587 587-001-wcs 20-feb-2019
587 587-002-qlc 25-feb-2019
587 587-003-qhr 03-mar-2019
594 594-001-qwn 04-feb-2018
594 594-002-agj 09-feb-2018
648 648-001-wuf 15-mar-2019
648 648-002-qbf 22-mar-2019
648 648-003-olr 27-mar-2019
648 648-004-wmf 30-mar-2019
;
proc sort data=enroll;
by patient dateassigned;
run;
data calendar;
length patient $8.;
set calendar;
patient=substr(patientID,1,7);
dateassigned=datetracked;
run;
proc sort data=calendar;
by patient dateassigned;
run;
data want;
merge enroll(in=a) calendar(in=b);
by patient dateassigned;
if a and b;
run;
您想在哪个表格中突出显示线条是否不对齐? 我将使用 proc sql 语句进行内部连接。
然后您可以在 A. Enroll 或 B. Calendar 中突出显示是否存在未找到 alignment 的行:
/* Inner join to have view on aligned lines */
proc sql;
create table aligned as
select a.*,
b.*
from enroll a inner join calendar b on a.patient = substr(b.patientID,1,7) and
a.dateassigned = b.datetracked;
quit;
/* A.Except statement to have view on non aligned lines - Enroll table*/
proc sql;
create table non_aligned_enroll as
select * from enroll
except
select a.* from enroll a inner join calendar b on a.patient =
substr(b.patientID,1,7) and a.dateassigned = b.datetracked;
quit;
/* B.Except statement to have view on non aligned lines - Enroll table*/
proc sql;
create table non_aligned_calendar as
select * from calendar
except
select b.* from enroll a inner join calendar b on a.patient =
substr(b.patientID,1,7) and a.dateassigned = b.datetracked;
quit;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.