【问题标题】:How do I merge by more than one variable using proc SQL is SAS如何使用proc SQL合并多个变量是SAS
【发布时间】:2016-09-28 13:54:15
【问题描述】:

我在 SAS 中有 2 个数据集:

main_1

ID 代表剂量反应
1 2 34 567
1 1 45 756
2 1 35 456
3 1 56 345

main_2

ID 代表小时日
1 1 89 157
2 1 62 365
3 1 12 689

我可以轻松地将这两个数据集首先按 ID 合并,然后按 Rep(因为其中一个 ID 有两个观察值)与 SAS 中的以下代码:

proc import out=main_1 
    datafile='/folders/myfolders/sasuser.v94/main_1.xls'
    dbms=xls replace;
    /*optional*/
    sheet='Sheet1';
    getnames=yes;
run;

proc import out=main_2 
    datafile='/folders/myfolders/sasuser.v94/main_2.xls'
    dbms=xls replace;
    /*optional*/
    sheet='Sheet1';
    getnames=yes;
run;

/*merge datasets based on common variable (ID then Rep)*/
    /*first sort all datasets by target variables*/
proc sort data=main_1;
    by ID Rep;
proc sort data=main_2;
    by ID Rep;
run;
    /*can now be merged*/
data main_merge;
    merge main_1 main_2;
    by ID Rep;
run;

这会产生下表:

ID Rep Dose Response Hour Day
1 1 45 756 89 157
1 2 34 567。 .
2 1 35 456 62 365
3 1 56 345 12 689

我目前有以下 proc SQL 替代方案(我对它的可怕之处感到非常抱歉),但似乎无法合并超过 1 个变量(即 ID 和 Rep):

proc sql;
    create table merged_sql as 
    select L.*, R.*
    from main_1 as L
    LEFT JOIN main_2 as R
    on L.ID = R.ID;
quit;

产生以下内容:

ID Rep Dose Response Hour Day
1 2 34 567 89 157
1 1 45 756 89 157
2 1 35 456 62 365
3 1 56 345 12 689

关于实现与以前相同的表的 proc SQL 代码有什么建议吗?我当前的代码将“89 157”添加到两个 ID=1 观察中。

非常感谢。

【问题讨论】:

  • 简单,只需在OB子句中添加额外的连接条件:on L.ID = R.ID; -->> on L.ID = R.ID AND L.rep = R.rep;

标签: sql variables merge sas proc-sql


【解决方案1】:

你快到了……

proc sql;
    create table merged_sql as 
      select L.*, 
             R.HOUR,
             R.DAY
        from main_1 as L
          LEFT JOIN main_2 as R
                 on L.ID = R.ID
                and L.REP = R.REP;
quit;

不使用R.* 的原因是为了避免出现关于重复 ID 和 REP 字段的注释或警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    相关资源
    最近更新 更多