我在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 Rep Hour Day
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剂量响应小时日
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剂量响应小时日
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观察值。
非常感谢。
答案 0 :(得分: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字段的注释或警告。