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

lrk*_*889 3 sas

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

因此,数据集几乎都是:

data inpatient;
input Patient_ID Tobacco;
datalines;
1 0
2 1
3 1
4 1
5 0
;
run;
Run Code Online (Sandbox Code Playgroud)

我正在尝试合并住院病人,门诊病人和专业人员,这样我就可以使用以下三种数据集中的任何一种来获得烟草索赔的患者ID:

data tobaccoall;
merge inpatient outpatient professional;
by rid;
run;
Run Code Online (Sandbox Code Playgroud)

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

DWa*_*Wal 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;
Run Code Online (Sandbox Code Playgroud)