全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7084 4
2017-06-04
自学SAS,程序跑不对。我有数据集Lab1  存储数据
ID    lbtest    stage  sex   result  significant
1      ALT       V1       F      20           NCS
1      CK       V2        F      60           CS
2      ALT       V2       M      60           CS
2      CK        V2       M      60           CS
2      AST       V2       M      60           CS

有range 存储范围
lbtest  sex    min   max  unit
ALT     M       1       5       g
ALT     F       1        5.5     g
AST     M      1.5     5       %
AST     F       1        5.5     %

CK       M      1.5     5         mg
CK       F       1        5.5     mg

我想在Lab1中增加 range的变量sex min max unit,变量的数值根据range中lbtest 及sex进行匹配,
我现在写:
proc sort data=lab1;by lbtest SEX;run;
proc sort data=range;by lbtest SEX;run;

data lab1b;
merge lab1 range;by lbtest sex;run;
程序跑出来是纵向连接的,不知道怎么修改



二维码

扫码加我 拉你入群

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

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

全部回复
2017-6-4 22:26:06
复制代码
二维码

扫码加我 拉你入群

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

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

2017-6-5 00:09:15
我觉得从程序开销的角度讲,如果不需要排序就尽量避免排序吧,数据量一多你那两个sort耗时效果就愈发明显。因此,用proc sql会好点。

proc sql;
title ’Table lab range Merged’;
select coalesce(lab1.lbtest, range.lbtest) as mylbtest, coalesce(lab1.sex, range.sex) as mysex
from lab1
full join
range
on lab1.lbtest = range.lbtest
and
lab1.sex = range.sex;

run;
二维码

扫码加我 拉你入群

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

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

2017-6-5 07:32:20
个人认为sql的数据连接比merge好
二维码

扫码加我 拉你入群

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

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

2017-6-12 23:42:06
data a;
infile datalines;
input ID    lbtest $   stage $ sex $  result  significant$;
datalines;
1      ALT       V1       F      20           NCS
1      CK       V2        F      60           CS
2      ALT       V2       M      60           CS
2      CK        V2       M      60           CS
2      AST       V2       M      60           CS
;
run;
data b;
infile datalines;
input lbtest $ sex  $  min   max  unit $;
datalines;
ALT     M       1       5       g
ALT     F       1        5.5     g
AST     M      1.5     5         %
AST     F       1        5.5     %
CK       M      1.5     5         mg
CK       F       1        5.5     mg
;
run;
proc sort data=a;by lbtest SEX;run;
proc sort data=b;by lbtest SEX;run;

/*left join in sql*/
proc sql;
title ’Table lab range Merged’;
select *
from a
left join
b (keep=lbtest sex min max unit)
on a.lbtest = b.lbtest and a.sex = b.sex;
run;
/*left join in sas merge*/
data  c;
           merge a(in=x) b(in=y);      
           by lbtest SEX;                           
           if x;                  
         run;
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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