【问题标题】:Merging but keeping all observations?合并但保留所有观察结果?
【发布时间】:2015-02-25 14:58:02
【问题描述】:

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

因此,数据集几乎都是:

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

我正在尝试合并住院患者、门诊患者和专业人员,以便我留下在三个数据集中的任何一个数据集中有烟草声明的患者 ID,使用:

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

但是,它在新数据集中用 0 覆盖了一些 1。如何更好地合并数据集以查找患者是否在任何数据集中有索赔?

【问题讨论】:

    标签: sas


    【解决方案1】:

    当您在 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;
    

    【讨论】:

    • 好答案。您可能会添加一些关于使用 COALESCE 或逻辑语句在最后获取单个变量的内容,这也可能是他们真正想要的。
    【解决方案2】:

    如果您的数据是 1=has .=doesn't have (missing),那么您可以使用 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多