楼主: lyn60
6381 11

[问答] 急求关于两表merge的问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

32%

还不是VIP/贵宾

-

威望
0
论坛币
17 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
216 点
帖子
19
精华
0
在线时间
27 小时
注册时间
2009-1-7
最后登录
2011-2-27

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我先把top1和edi两表按stkcd year合并,命令为:
data model;merge top1(in=a) edi(in=b);by stkcd year;
if a=1 and b=1;run;

结果为:
NOTE: 从数据集 WORK.TOP1 读取了 5497 个观测。
NOTE: 从数据集 WORK.EDI 读取了 2478 个观测。
NOTE: 数据集 WORK.MODEL 有 1898 个观测和 4 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.03 秒
      CPU 时间         0.03 秒

问题不大,接下来我又将tobinq2与model也按stkcd year合并,命令为:
data model;merge tobinq2(in=a) model(in=b);by stkcd year;
if a=1 and b=1;run;

但结果却是:
NOTE: 从数据集 WORK.TOBINQ2 读取了 6345 个观测。
NOTE: 从数据集 WORK.MODEL 读取了 1898 个观测。
NOTE: 数据集 WORK.MODEL 有 0 个观测和 6 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.03 秒
      CPU 时间         0.03 秒


两个表明明按照stkcd year有相同的记录,为什么合并结果总是0个观测值呢???
二维码

扫码加我 拉你入群

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

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

关键词:Merge TobinQ model stkcd Tobin Merge

沙发
lyn60 发表于 2010-12-25 16:04:20 |只看作者 |坛友微信交流群
诚心向高手请教啊~~顶起来~

使用道具

藤椅
杨花点点 发表于 2010-12-25 16:14:33 |只看作者 |坛友微信交流群
data model;merge tobinq2(in=a) model(in=b);by stkcd year;
if a=1 and b=1;run;

但结果却是:
NOTE: 从数据集 WORK.TOP1 读取了 6345个观测。
NOTE: 从数据集 WORK.EDI 读取了 1898个观测。
楼主确定以上的code和log是对应的?这个TOP1不对劲吧

使用道具

板凳
lyn60 发表于 2010-12-25 16:21:16 |只看作者 |坛友微信交流群
3# 杨花点点
不好意思搞错了。。
已经更正了

使用道具

报纸
lyn60 发表于 2010-12-25 16:25:25 |只看作者 |坛友微信交流群
3# 杨花点点
那个贴错了,已经改了。。可为什么合并不成功呢?奇怪死了T_T

使用道具

地板
baoaibaobao 发表于 2010-12-25 17:01:05 |只看作者 |坛友微信交流群
1# lyn60 我觉得这很正常吧
看看这个,你会明白的
  1. data a;
  2. input id x y z;
  3. cards;
  4. 1 1 2 3
  5. 2 3 4 5
  6. 3 4 5 6
  7. 4 6 8 9
  8. 5 6 7 8
  9. ;
  10. data b;
  11. input id x y t;
  12. cards;
  13. 1 3 4 5
  14. 2 6 7 8
  15. 3 7 8 9
  16. ;
  17. data c;
  18. merge a(in=a) b(in=b);
  19. by id;
  20. if a=1 and b=1;
  21. run;


  22. data d;
  23. input id x y z;
  24. cards;
  25. 1 1 2 3
  26. 2 3 4 5
  27. 3 4 5 6
  28. 4 6 8 9
  29. 5 6 7 8
  30. ;
  31. data e;
  32. input id x y t;
  33. cards;
  34. 6 3 4 5
  35. 7 6 7 8
  36. 8 7 8 9
  37. ;
  38. data f;
  39. merge d(in=d) e(in=e);
  40. by id;
  41. if d=1 and e=1;
  42. run;
复制代码
a与b有相同的ID,merge、if后,会保留共同ID的观测。
d与e没有相同的ID,故merge、if后,没有观测。

使用道具

7
lyn60 发表于 2010-12-25 18:56:58 |只看作者 |坛友微信交流群
6# baoaibaobao
这里的id是变量之一,后又作为Merge的关键词吗?
如果是这样,那我要合并的两个表也有相同的stkcd啊,记录为何无法并一起呢?

使用道具

8
baoaibaobao 发表于 2010-12-25 19:06:43 |只看作者 |坛友微信交流群
7# lyn60 如果merge by有两个变量,那要求更严格了,必须两个都相同,才能输出观测。

使用道具

9
lyn60 发表于 2010-12-27 23:00:49 |只看作者 |坛友微信交流群
8# baoaibaobao
是啊是啊,我知道,那我肯定是知道两表存在stkcd year两变量都相同的记录,才想要合并的啊
可是合出来竟然是0,我就不明白了,明显2表有stkcd year都相同的观测值啊

使用道具

10
baoaibaobao 发表于 2010-12-28 08:59:11 |只看作者 |坛友微信交流群
data model;merge tobinq2(in=a) model(in=b);by stkcd year;
_a=a;_b=b;run;
看看有没有_a和_b均为1的记录,从你的结果来看,应该是没有!

使用道具

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

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

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

GMT+8, 2024-5-21 14:50