楼主: luciferzerogin
7156 4

[问答] 如何用merge按特定条件进行合并? [推广有奖]

  • 0关注
  • 0粉丝

小学生

35%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
11 小时
注册时间
2017-6-4
最后登录
2022-2-7

楼主
luciferzerogin 发表于 2017-6-4 17:21:14 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
自学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;
程序跑出来是纵向连接的,不知道怎么修改



二维码

扫码加我 拉你入群

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

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

关键词:Merge 行合并 如何用 significant GE Lab merge

回帖推荐

sugardove 发表于5楼  查看完整内容

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 lbtes ...

沙发
lovexialulu 发表于 2017-6-4 22:26:06
  1. data lab1b;
  2. merge lab1(in=a) range(rename=(unit=unit_));
  3. by lbtest sex;
  4. if a;/*left jion*/
  5. run;
复制代码

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

板凳
8112mmw 发表于 2017-6-5 07:32:20
个人认为sql的数据连接比merge好
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄旗一点兵马收0 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

报纸
sugardove 发表于 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;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 09:36