如何使用 proc SQL is SAS 合并多个变量

How do I merge by more than one variable using proc SQL is SAS

我在 SAS 中有 2 个数据集:

main_1

ID Rep 剂量反应
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;

这会产生以下结果 table:

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 代码的任何建议,以实现与以前相同的 table?我当前的代码将“89 157”添加到两个 ID=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 字段的注释或警告。