楼主: Laughing06
2193 6

关于SAS数据集的合并问题 [推广有奖]

  • 4关注
  • 0粉丝

大专生

65%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
499 点
帖子
37
精华
0
在线时间
51 小时
注册时间
2013-3-13
最后登录
2016-5-3

楼主
Laughing06 发表于 2013-10-5 22:41:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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这两个变量进行合并。
二维码

扫码加我 拉你入群

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

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

关键词:sas数据集 数据集 dataset DataS value

沙发
妖帝东皇 发表于 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;
未测试过程序,大概就是这样的吧??
┏━━━━━━━━━━━━━━┓
   ☞❤学而无友必然孤陋寡闻!❤
┗━━━━━━━━━━━━━━┛

藤椅
haoli1991 发表于 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;

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

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

地板
haoli1991 发表于 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。

7
TAGI 发表于 2013-10-9 20:25:19
data new;
merge dataset1(in=a) dataset2;
by labID   labtest;
if a;
run;

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 04:18