我有两个不同的数据集。一个是患者'登记信息,一个是他们的病史,就诊断而言。登记文件包含所有患者的信息(400多万人),而患者病史仅约55,000,这是因为它受某些疾病的限制。
我想为具有特定诊断的那些患者创建一个新的患者登记信息数据集。每位患者都有一个独特的患者ID,但我不确定是否加入,合并等。
任何帮助都将不胜感激!!
患者登记数据示例:
患者ID |已注册的月份
1 | 60
2 | 48
3 | 49
患者病史的例子
患者ID | Diag1 | Diag2 | Diag3
1 | 629 | 635 | 646
6 | 631 | 636 | 645
7 647 | 645 | 545
答案 0 :(得分:0)
不同的方法。我会采用PROC SQL方式:
proc sql;
create table MyOutput as
select a.PatientID, a.Months, b.Diag1, b.Diag2, b.Diag3
from Enrollment as a inner join History as b
on a.PatientID=b.PatientID
where b.Diag1='645' or b.Diag2='645' or b.Diag3='645'
;
quit;
你明白了。
答案 1 :(得分:0)
您可以使用条件进行合并。
data new;
merge enrollment(in=a) history(in=b);
by PatientID;
if(b);
run;
这会给你结果:
患者ID | 注册的月份 | Diag1 | Diag2 | Diag3
1 | 60 | 629 | 635 | 646
6 | 。 | 631 | 636 | 645
7 | 。 | 647 | 645 | 545
但是,如果您只想在结果中输入患者ID“1”,那么您必须稍微修改上述代码
data new;
merge enrollment(in=a) history(in=b);
by PatientID;
if(a and b);
run;
此代码将为您提供结果
患者ID | 注册的月份 | Diag1 | Diag2 | Diag3
1 | 60 | 629 | 635 | 646
答案 2 :(得分:0)
您可以通过仅过滤患者病史数据中的ID来从患者登记数据中选择您想要的数据。这可以通过SQL Where子句来完成,该子句检查ID是否在表中。
proc sql;
create table want as
select *
from patient_enrollment
where patient_ID in (select patient_ID from patient_history)
order by patient_ID;
quit;