楼主: yun332119
6136 4

[SAS EM] 急!求教如何用SAS实现两个数据表格间类似于Vlookup的功能(比它更复杂)?谢谢! [推广有奖]

  • 0关注
  • 0粉丝

高中生

0%

还不是VIP/贵宾

-

威望
0
论坛币
325 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
271 点
帖子
7
精华
0
在线时间
26 小时
注册时间
2010-8-3
最后登录
2016-9-10

50论坛币
不好意思 刚发现能够悬赏,麻烦楼主把我之前那张没悬赏的重复贴删掉吧,谢谢!


现在我的情况是:有一个不同类型的药对应的编码表(表1),还有另一个用药的编码表(表2),需要通过表1中的编码信息来对应找出表2中的编码是属于哪种类型的药。

拿两个小数据来进一步说明一下:

表1的数据结构类似于:

data s_list;
input type $ code1-code4;
cards;

a 1001 2003 3772 3638
b 1223 2334 .       .
c 2221 2331 3442 .
;

run;



表2的数据结构类似于:


data drug;

input provid code;

cards;

100 1001

101 2003

110 2221

111 1111

;

run;


希望最终output的结果是这样的:


provid code type_a type_b type_c

100    1001     1        0         0

101    2003     1        0         0

110    2221     0        0         1

111    1111     0        0         0


请高手们帮忙!!!万分感谢!!!





最佳答案

yueCynthia 查看完整内容

1.先把list转置一下 proc transpose data=s_list out=list(drop=_NAME_); by type; run; ...
关键词:vlookup lookup Vlook 数据表格 Look 如何 信息 如何 信息

本帖被以下文库推荐

沙发
yueCynthia 发表于 2014-2-18 08:06:46 |只看作者 |坛友微信交流群
1.先把list转置一下
proc transpose data=s_list out=list(drop=_NAME_);                                                                                       
        by type;                                                                                                                        
run;                                                                                                                                    
1.jpg
2.俩表连一块儿 (其实还是用natural left join 比较好)                                                                                                                                       
proc sql;                                                                                                                              
create table mergedata as                                                                                                               
select provid, code, type                                                                                                               
from drug left join list                                                                                                               
on list.col1=drug.code;                                                                                                                 
quit;                                                                                                                                   
run;                                                                                                                                    
2.jpg
3.新建三列判断type                                                                                                                                       
data final;                                                                                                                             
set mergedata;                                                                                                                          
if type='a' then do;                                                                                                                    
type_a=1;                                                                                                                              
type_b=0;                                                                                                                              
type_c=0;                                                                                                                              
end;                                                                                                                                    
else if type='b' then do;                                                                                                               
type_a=0;                                                                                                                              
type_b=1;                                                                                                                              
type_c=0;                                                                                                                              
end;                                                                                                                                    
else if type='c' then do;                                                                                                               
type_a=0;                                                                                                                              
type_b=0;                                                                                                                              
type_c=1;                                                                                                                              
end;                                                                                                                                    
else do;                                                                                                                                
type_a=0;                                                                                                                              
type_b=0;                                                                                                                              
type_c=0;                                                                                                                              
end;                                                                                                                                    
run;   
3.jpg          
不知道是不是你想要的哈                                                                                                                        
已有 1 人评分论坛币 收起 理由
admin_kefu + 50 热心帮助其他会员

总评分: 论坛币 + 50   查看全部评分

使用道具

藤椅
ˇ﹏泓.° 发表于 2014-2-18 08:16:58 |只看作者 |坛友微信交流群
建议先用proc sql合并数据库,在用proc transpose达到你要的结果

使用道具

板凳
wo528800wo 发表于 2014-2-18 08:29:36 |只看作者 |坛友微信交流群
proc sql;
create table test as
select a.*,b.*
from 表一 as a inner join 表二 as b
on a.code=b.code
;
quit;

使用道具

报纸
zzheng722 发表于 2014-2-25 20:43:24 |只看作者 |坛友微信交流群
/*生成新code变量来自这4列code1,code2,code3,code4所有信息*、

data s_list2;
   set s_list;
   code=code1;
   output;
   code=code2;
   output;
   code=code3;
   output;
   code=code4;
run;

/* 与你的drug 数据合并*/
proc sort data=s_list2 nodupkey;
by code;
run;
proc sort data=drug;
  by code;
run;

/*生成3个哑变量dummy variable即可*/
data drug2;
   merge drug s_list2;
   by code;
   if type='a' then do;
   type_a=1;
   type_b=0;
   type_c=0;
   end;
   
  else if type='b' then do;
   type_a=0;
   type_b=1;
   type_c=0;
   end;

   else if type='c' then do;
   type_a=0;
   type_b=0;
   type_c=1;
   end;
run;

  
已有 1 人评分论坛币 收起 理由
admin_kefu + 50 热心帮助其他会员

总评分: 论坛币 + 50   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 19:10