全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
14593 7
2013-12-27
如题:
数据集1 :字段A :yanbiantuhao304用户列表与相关信息baseInfoTemplate12345
                           检测更新信息5201858161776108380手机型号ios7.1
数据集2:字段B: 用户列表与相关信息baseInfoTemplate

如果数据集2中的字段在数据1中查到了,则将B字段加入数据1中,否则为空,
结果为:
数据1
A            B
yanbiantuhao304用户列表与相关信息baseInfoTemplate12345     用户列表与相关信息baseInfoTemplate
检测更新信息5201858161776108380手机型号ios7.1  

求各位大神赐教。

二维码

扫码加我 拉你入群

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

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

全部回复
2013-12-29 09:12:13
如果数据集 b 是 look-up table, 可以使用 Hash Object Merge
复制代码
二维码

扫码加我 拉你入群

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

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

2013-12-29 10:58:47
对楼主的意思不太明白。如果需要模糊匹配的话,spedis()这个函数可以用,不过这个函数计算匹配度是从前往后算的,就是前面的字符约匹配,则模糊匹配出来的值就越小(越小越好)。
但是就楼主的例子而言,直接用Index()函数匹配就可以了,不需要模糊查找。楼主可以举一个别的例子看看吗?

还有,想请教一下,此处为何要使用Hash?
                                                                                                                                       
                                                                                                                                       
data a;                                                                                                                                
length vara $20.;                                                                                                                       
input vara $;                                                                                                                           
datalines;                                                                                                                              
abcMMMMMxyz                                                                                                                             
1123XXX0000                                                                                                                             
1999yyy0000                                                                                                                             
23456ZZZZZZ99999                                                                                                                        
;                                                                                                                                       
run;                                                                                                                                    
                                                                                                                                       
data b;                /* look-up table */                                                                                             
   length varb $20.;                                                                                                                    
input varb $;                                                                                                                           
datalines;                                                                                                                              
MMMMM                                                                                                                                   
ZZZZZZ                                                                                                                                 
; run;                                                                                                                                 
                                                                                                                                       
proc sql;                                                                                                                              
create table c as select vara,varb                                                                                                      
from a,b                                                                                                                                
where index(STRIP(a.vara),STRIP(b.varb))>=1;                                                                                            
quit;                                                                                                                                   
                                                                                                                                       
/*或者*/                                                                                                                                
proc sql;                                                                                                                              
create table c as select vara,varb                                                                                                      
from a                                                                                                                                 
left join b                                                                                                                             
on index(STRIP(a.vara),STRIP(b.varb))>=1;                                                                                               
quit;
二维码

扫码加我 拉你入群

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

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

2013-12-29 11:23:33
changgz 发表于 2013-12-29 10:58
对楼主的意思不太明白。如果需要模糊匹配的话,spedis()这个函数可以用,不过这个函数计算匹配度是从前往 ...
上面的 hash join 等同于 sql left join.
如果没有 call missing(varc). 这句, 就是 inner join.
把find()改成index() 可以得到同样的结果.
复制代码
二维码

扫码加我 拉你入群

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

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

2013-12-29 11:30:14
yongyitian 发表于 2013-12-29 11:23
上面的 hash join 等同于 sql left join.
如果没有 call missing(varc). 这句, 就是 inner join ...
多谢了。
请问在什么情况下会想到使用Hash呢?
二维码

扫码加我 拉你入群

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

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

2013-12-29 11:41:07
changgz 发表于 2013-12-29 11:30
多谢了。
请问在什么情况下会想到使用Hash呢?
楼主的数据集2 貌似一个 look-up table.  datastep merge 需要有一个 by variable. 因为没有其他变量,不知如何用 data step merge or update.
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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