楼主: 带发修行僧
1834 4

如何匹配两个表中的observation [推广有奖]

  • 0关注
  • 0粉丝

大专生

10%

还不是VIP/贵宾

-

威望
0
论坛币
859 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
294 点
帖子
25
精华
0
在线时间
48 小时
注册时间
2007-11-11
最后登录
2024-4-22

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教各位大神:

本人现在有两个表,要求是给表a中的每一个observation在表b中找到match的observation。表如下:

表a:

firm    day       size         bm
A        26       165       0.97   
B        120     549       1.35
C        45       236       0.65


表b:

firm    day       size          bm
D       56       365         1.17   
E       20        90          0.96
F       23       139         0.64



配对的要求是  (1)day的绝对值差别不大于20天;(2)size的差别在50%到150%; (3)bm最接近

举个例子,对于表a中的公司A,我们可以看到表b中的公司E是匹配的observaton,根据三个条件:(1)day的差别为6天;E的size在A的50%到150%之间;(3)E的bm是满足条件的公司中bm最接近A的(F符合前两个条件,但bm与A相差较大)。

谢谢了

二维码

扫码加我 拉你入群

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

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

关键词:observation observat ATION ATI VAT 如何

沙发
mingfeng07 学生认证  发表于 2014-7-25 17:10:40 |只看作者 |坛友微信交流群
  1. data a;
  2. input firm $ day size   bm;
  3. cards;
  4. A        26       165       0.97   
  5. B        120     549       1.35
  6. C        45       236       0.65
  7. ;
  8. run;

  9. data b;
  10. input firm  $  day   size  bm;
  11. cards;
  12. D       56       365         1.17   
  13. E       20        90          0.96
  14. F       23       139         0.64
  15. ;
  16. run;
  17. proc datasets lib=work;
  18. modify b;
  19. rename firm=firm_b day=day_b size=size_b bm=bm_b;
  20. quit;
  21. proc sql;
  22. create table c as select *,abs(bm-bm_b) as bm_bm_b from a,b where abs(day-day_b)<=20 and size*0.5<=size_b<=size*1.5;
  23. quit;
  24. proc sql;
  25. create table test as select firm,firm_b from c group by firm having min(bm_bm_b)=bm_bm_b;
  26. quit;
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
带发修行僧 + 1 + 1 精彩帖子

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

使用道具

藤椅
bobguy 发表于 2014-7-27 09:41:15 |只看作者 |坛友微信交流群
mingfeng07 发表于 2014-7-25 17:10
One sql will be sufficient.

data a;
input firm $ day size   bm;
cards;
A        26       165       0.97   
B        120     549       1.35
C        45       236       0.65
;
run;

data b;
input firm  $  day   size  bm;
cards;
D       56       365         1.17   
E       20        90          0.96
F       23       139         0.64
;
run;

proc sql;
   select a.firm as firm_a,b.firm as firm_b
   from a a , b b
   where abs(a.day-b.day)<=20  
   and 0.5<=b.size/a.size<=1.5
   group by firm_a
   having abs(a.bm-b.bm)=min(abs(a.bm-b.bm))
   ;
   quit;
已有 1 人评分学术水平 热心指数 收起 理由
带发修行僧 + 1 + 1 精彩帖子

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

使用道具

板凳
带发修行僧 发表于 2014-7-28 06:47:12 |只看作者 |坛友微信交流群
bobguy 发表于 2014-7-27 09:41
One sql will be sufficient.

data a;
非常谢谢!

使用道具

报纸
带发修行僧 发表于 2014-7-28 06:48:15 |只看作者 |坛友微信交流群
mingfeng07 发表于 2014-7-25 17:10
非常感谢!

使用道具

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

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

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

GMT+8, 2024-4-25 18:05