全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
12878 3
2011-02-28
RT,程序如下,对两个表中共同变量stkcd,enddt配对:
proc sql noprint;                                                                              
  create table abc as                                                                                                                  
  select *                                                                                                                              
  from f1 left join f2                                                                                                        
  on f1.stkcd=f2.stkcd                                                                                                        
     and                                                                                                                                
     year(f1.enddt)=year(f2.enddt);                                                                                          
quit;

本来,f1中有61100个观测,可是新表abc中却有61200多个观测,到底是什么问题呢?只多出100多个观测。。。纳闷中,
请高手指点,万分感谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2011-3-1 01:40:08
你确定你的f1 ,f2不是弄反了? 如果不是的话,check 一下duplicate 。
二维码

扫码加我 拉你入群

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

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

2011-3-1 03:29:58
SAS join是 cross join
如果你的 f1 和f2都有重复的 stkcd和 enddt,比如f1有a个重复,f2有b个重复,对于这组 stkcd和enddt,就有a*b个observation
所以结果多于原来的很正常。
简单举个例子
f1
stkcd enddt y
1 2 3
1 2 4
f2
stkcd enddt y
1 2 1
12 2
那么join的结果就是
1 2 3 1
1 2 3 2
1 2 3 1
1 2 3 2
noveror 发表于 2011-2-28 21:39
RT,程序如下,对两个表中共同变量stkcd,enddt配对:
proc sql noprint;                                                                              
  create table abc as                                                                                                                  
  select *                                                                                                                              
  from f1 left join f2                                                                                                        
  on f1.stkcd=f2.stkcd                                                                                                        
     and                                                                                                                                
     year(f1.enddt)=year(f2.enddt);                                                                                          
quit;

本来,f1中有61100个观测,可是新表abc中却有61200多个观测,到底是什么问题呢?只多出100多个观测。。。纳闷中,
请高手指点,万分感谢!
二维码

扫码加我 拉你入群

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

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

2011-3-2 15:59:50
楼上正解,LEFT Join 连接的方式有点类似卡迪尔成绩,一个记录和另一个数据集的记录相配对,如由重复的项,结果也会由多条记录;至于他们数据记录的关系,你可以自己分析下
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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