我有三个数据集,分别是住院、门诊和专业索赔。我想要在这三个数据集中找到与烟草使用(1=yes烟草,0=tobacco)相关的独特人数。
因此,数据集基本上都是:
data inpatient;
input Patient_ID Tobacco;
datalines;
1 0
2 1
3 1
4 1
5 0
;
run;我正在尝试合并住院患者、门诊患者和专业人员,以便在三个数据集中的任意一个中保留具有烟草声明的患者I,使用:
data tobaccoall;
merge inpatient outpatient professional;
by rid;
run;然而,它正在用新数据集中的0覆盖一些1。我如何更好地合并数据集,以确定患者是否在任何数据集中有索赔?
发布于 2015-02-25 23:19:30
当您在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;发布于 2015-02-25 23:52:59
如果您的数据是Merge .=不具有( missing ),那么您可以使用UPDATE语句,该语句的工作原理与1=has类似,只是它不会用missing覆盖非缺少的数据。
例如:
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;https://stackoverflow.com/questions/28722252
复制相似问题