合并但保留所有观察结果?

时间:2015-02-25 14:58:03

标签: sas

我有三个住院病人,门诊病人和专业索赔数据集。我想在这三个数据集中的任何一个中找到与烟草使用有关的独特人数(1 =是烟草,0 =烟草)。

因此,数据集几乎都是:

data inpatient;
input Patient_ID Tobacco;
datalines;
1 0
2 1
3 1
4 1
5 0
;
run;

我正在尝试合并住院病人,门诊病人和专业人员,这样我就可以使用以下三种数据集中的任何一种,在那些患有烟草声明的病人身上留下:

data tobaccoall;
merge inpatient outpatient professional;
by rid;
run;

但是,在新数据集中,它会覆盖一些带有0的1。如何更好地合并数据集以查找患者是否在任何数据集中拥有声明?

2 个答案:

答案 0 :(得分:6)

在SAS中合并共享变量名称的数据集时,merge语句右侧列出的数据集中的值会覆盖其左侧数据集中的值。为了保留每个值,您需要在合并之前重命名变量。您可以在merge语句中通过在每个数据集后添加rename=选项来执行此操作。

如果您想要一个表示烟草声明是否存在于三个变量中的任何变量的变量,您可以使用max函数创建一个新变量来组合三个不同的值。

data tobaccoall;
  merge inpatient    (rename=(tobacco=tobacco_in))
        outpatient   (rename=(tobacco=tobacco_out))
        professional (rename=(tobacco=tobacco_pro));
  by rid;
  tobacco_any = max(tobacco_in,tobacco_out,tobacco_pro,0);
run;

答案 1 :(得分:0)

如果你的数据是1 = has。=没有(缺失),那么你可以使用UPDATE语句,它主要像Merge一样工作,除非它不会覆盖非缺失数据丢失。

例如:

data inpatient;
input Patient_ID Tobacco;
datalines;
1 .
2 1
3 1
4 1
5 .
;
run;

data outpatient;
input Patient_ID Tobacco;
datalines;
1 1
2 1
3 .
4 .
5 .
;
run;

data want;
  update inpatient outpatient;
  by patient_id;
run;