全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2128 6
2013-10-05
dataset1:
PTID   labID  labtest  value
1001   01      a          1
1001   01      b          2
1001   01      c          3
1001   02      a          4
1001   02      b          5
1001   02      c          6
1002   01      a          11
1002   01      b          22
1002   01      c          33
1002   02      a          44
1002   02      b          55
1002   02      c          66


dataset2 :
labID  labtest  lowran  hiran
01      a          0           20
01      b          10         50
01      c          20         40
02      a          15         30
02      b          10         60
02      c          0           50

类似于上面两个数据集,要按照labID 和labtest这两个变量进行合并,请问如何在SAS中实现??因为之前看一些资料说用merge语句的话by后面的变量最好是一个,多于两个容易出错。我试了下,确实不是我想要的效果。
dataset1中变量PTID是病人号码,value就是对应的labtest的值;dataset2中lowran,hiran是对应labtest的正常范围,所以要进行合并。然后,有多个labID,每个的正常范围一般不一样,所以要求就是按照labID 和labtest这两个变量进行合并。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-10-5 23:07:31
data dataset1;
input PTID $   labID $  labtest $  value;
cards;
1001   01      a          1
1001   01      b          2
1001   01      c          3
1001   02      a          4
1001   02      b          5
1001   02      c          6
1002   01      a          11
1002   01      b          22
1002   01      c          33
1002   02      a          44
1002   02      b          55
1002   02      c          66
;
run;

data dataset2;
input labID $  labtest $  lowran  hiran;
cards;
01      a          0           20
01      b          10         50
01      c          20         40
02      a          15         30
02      b          10         60
02      c          0           50
;
run;
proc sort data=dataset1;
by labID   labtest;
run;
proc sort data=dataset2;
by labID   labtest;
run;
data new;
merge dataset1 dataset2;
by labID   labtest;
run;
proc print;
run;
未测试过程序,大概就是这样的吧??
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-10-5 23:13:56
proc sql;
create table Merge_Result as
select a.*,b.*
from dataset1 as a, dataset2 as b
where a.labID=b.labID and a.labtest=b.labtest;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-10-5 23:41:30
妖帝东皇 发表于 2013-10-5 23:07
data dataset1;
input PTID $   labID $  labtest $  value;
cards;
用merge是不行的。达不到我所要的效果。不过还是谢谢你。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-10-5 23:50:04
haoli1991 发表于 2013-10-5 23:13
proc sql;
create table Merge_Result as
select a.*,b.*
非常感谢。试了下,基本可以。但是数据集obs总数增多了,按理说合并后的数量应该和dataset1中的相同;可能是因为我源数据较多,还有其他情况没有反映在这个例子里面,我再看一下。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-10-7 22:46:43
Laughing06 发表于 2013-10-5 23:50
非常感谢。试了下,基本可以。但是数据集obs总数增多了,按理说合并后的数量应该和dataset1中的相同;可能 ...
sql 生成的是一个笛卡尔积,也就是列出所有可能的组合,然后根据条件筛选合适的。如果你的primary key不是unique的话,可能会造成obs重复,可以用proc sort data=x nodupkey; by .. ..; 来去除。 也可以用sql left join。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群