SAS - 合并两个数据集?

时间:2015-02-12 23:41:23

标签: merge sas

我有两个不同的数据集。一个是患者'登记信息,一个是他们的病史,就诊断而言。登记文件包含所有患者的信息(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

3 个答案:

答案 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;