楼主: jintianxiu
1712 9

[原创博文] proc sql 中一个疑问!!!为啥呢!!? [推广有奖]

  • 2关注
  • 0粉丝

本科生

8%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
590 点
帖子
81
精华
0
在线时间
38 小时
注册时间
2010-3-6
最后登录
2012-9-21

楼主
jintianxiu 发表于 2012-5-30 20:03:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
Hi 在编程的过程中出现一个疑问问题!!希望大家帮忙答疑哇!!
proc sql;
create table retvar as
select a.*, b.aret, b.resp from rerr as a left join resp_t as b
on a.firmi = b.firmi and a.datadate = b.datadate;
quit;
这个非常普通的程序 运行之后出现好几倍的 重复观测值!!本来 rerr数据集一个大约50万个observation,resp_b 大约10万个observation,生成的数据集retvar一共竟有几千万个 observation!!这是怎么产生的??!!我之后使用了proc sort data =retvar nodupkey;
by firmi datadate peer;
run;
去掉了90%的重复值!!
童鞋们 我以前也遇到过类似的问题 一直不知道问题出在哪里,还请告知其中原理哇!!不胜感激!!
二维码

扫码加我 拉你入群

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

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

关键词:proc sql ROC sql observation left join

回帖推荐

snoozer 发表于5楼  查看完整内容

For example, in data "rerr", you have firmi database peer 1 1 1 1 1 2 1 1 3 .... And in data "resp_t", you have firmi database aret 1 1 0.89 1 1 0.12 1 1 0.40 ... By merging, you will have firmi database peer aret 1 1 1 0.89 * 1 1 ...

本帖被以下文库推荐

沙发
jintianxiu 发表于 2012-5-30 20:59:40
顶一下啊

藤椅
mymine 发表于 2012-5-30 21:45:55
遇到过一次拼接导致数据量狂增的情况,主要原因是
on a.xx=b.xx;
这个语句中a数据表中的XX和b数据表中的xx分别有几千条空白数据
空白和空白相等导致数据变成几千乘以几千,最终数据暴增

您的情况要具体看,我遇到的情况仅供参考

板凳
tj0412ymy 发表于 2012-5-30 21:56:07
出现重复观测值是因为匹配时出现了多对多的情况,建议在Select语句中添加Distinct
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

报纸
snoozer 发表于 2012-5-30 23:10:19
For example, in data "rerr", you have
firmi   database  peer
1       1            1
1       1            2
1       1            3
....

And in data "resp_t", you have
firmi   database  aret
1       1            0.89
1       1            0.12
1       1            0.40
...

By merging, you will have
firmi   database  peer  aret
1       1            1       0.89 *
1       1            1       0.12
1       1            1       0.40
1       1            2       0.89 *
1       1            2       0.12
1       1            2       0.40
1       1            3       0.89 *
1       1            3       0.12
1       1            3       0.40   
...

When you perform proc sort, only the row with * will remain in the sorted data set. The question is which data set is the real one you want.
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

地板
chendonghui1987 发表于 2012-5-30 23:35:42
楼上正解

7
jintianxiu 发表于 2012-5-31 11:09:37
snoozer 发表于 2012-5-30 23:10
For example, in data "rerr", you have
firmi   database  peer
1       1            1
多谢!不过actually 在数据resp_t 中, the structure is
firmi database aret
1      1         0.89
1      2         0.12
2      1         0.40
2      2         0.29
2      3         0.40
2      4         0.9
3      1         0.7
3      2         0.3
....
所以 还是不明白为啥数据暴增呢

8
jintianxiu 发表于 2012-5-31 11:10:55
mymine 发表于 2012-5-30 21:45
遇到过一次拼接导致数据量狂增的情况,主要原因是
on a.xx=b.xx;
这个语句中a数据表中的XX和b数据表中的x ...
谢谢 不过这个确实是有大量的duplicates 所以 应该不是这个情况,继续探索中!

9
jintianxiu 发表于 2012-5-31 11:12:09
tj0412ymy 发表于 2012-5-30 21:56
出现重复观测值是因为匹配时出现了多对多的情况,建议在Select语句中添加Distinct
不是很明白,我的两个数据的structure可以参见我的回复,和另一楼的回复。不知道该如何添加distinct呢,望指教哇!!

10
snoozer 发表于 2012-6-1 00:06:14
jintianxiu 发表于 2012-5-31 11:09
多谢!不过actually 在数据resp_t 中, the structure is
firmi database aret
1      1         0.89 ...
That's a mystery ...
Then print out the merged data set and check where goes wrong, where the redundancy comes from.

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 08:58