楼主: noveror
12950 3

关于proc sql中的left join问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

15%

还不是VIP/贵宾

-

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

楼主
noveror 发表于 2011-2-28 21:39:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
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多个观测。。。纳闷中,
请高手指点,万分感谢!
二维码

扫码加我 拉你入群

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

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

关键词:left join proc sql join left sql SAS sql left join

沙发
lyceum 发表于 2011-3-1 01:40:08
你确定你的f1 ,f2不是弄反了? 如果不是的话,check 一下duplicate 。

藤椅
ntsean 发表于 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多个观测。。。纳闷中,
请高手指点,万分感谢!

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

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 21:04