SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

请教一个从两个表提取数据的问题

[复制链接]

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
11#
发表于 2011-4-2 17:11:26 | 只看该作者

Re: 请教一个从两个表提取数据的问题

[quote:outjqvuh]由 ganshenme » 2011年 4月 2日 周六 3:59 pm

多谢,程序虽然复杂一点,但是管用,问题是第一个left join会导致数据量奇大无比   [/quote:outjqvuh]

不生成vtemp

%macro a(yymmdd,id,company,lag=3);
  
proc sql;
create table v1 as select *
from a where &yymmdd. -10<= date< &yymmdd. and id="&id"
order by date descending;
create table  v2 as select *
from a where  &yymmdd.+10 >= date> &yymmdd. and  id="&id"
order by date ascending ;
create table   v3 as select *
from a where date= &yymmdd. and id="&id" ;
quit;

data vv_final ;
set vv_final(in=a) v1(obs=&lag.) v3(obs=1) v2 (obs=&lag.) ;
if not a then campany="&company.";
run;

%mend a;

data vv_final;
set a(obs=0);
data _null_;
set b ;
call execute('%a('||date||','||id||','||company||');');
call execute('run;');
run;
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
12#
发表于 2011-4-2 17:29:43 | 只看该作者

Re: 请教一个从两个表提取数据的问题

不知道你的a到底多大?如果还是太慢,run的太费劲的话,试试在a里对id,date建index,macro里面应该会快点。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2011-4-6 09:23:22 | 只看该作者

Re: 请教一个从两个表提取数据的问题

谢谢vicky!
我的表A有170万条数据,表B有6000多条记录,lag=125,用了13个小时跑完,不知道问题出在哪里 <!-- s:? --><img src="{SMILIES_PATH}/icon_confused.gif" alt=":?" title="Confused" /><!-- s:? -->
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
14#
发表于 2011-4-6 09:52:08 | 只看该作者

Re: 请教一个从两个表提取数据的问题

汗。。。。这个vtemp当然super super super 大了。。。。
对a里面加个index,然后把code里面第一层的选择放宽到lag+8,这个8是中国最长的长假天数
重新run应该不用那么久。。。
再不放心的话,先run data b的一百条,测试下速度。

btw,好奇什么分析要天数这么精确,125天和124天有差么?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
15#
 楼主| 发表于 2011-4-6 10:41:30 | 只看该作者

Re: 请教一个从两个表提取数据的问题

我这里给数据只是一个简单的例子,实际数据变量会多一些。

我们是要分析某个时间(表b)前后一段时间(表a)的结果,所以用到的lag会比较大,当然是125还是124没有很大关系。

另外如果lag=125的话,code里面第一层的选择可能会达到200.

如果只run data b的100条,几分钟就能完成,一条实际用时大概在5秒,但是到后面就比较慢了,一条用时会达到10秒以上。
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
16#
发表于 2011-4-6 11:03:42 | 只看该作者

Re: 请教一个从两个表提取数据的问题

missing的天数很多么?不然为什么要放宽到200这么大?

越来越慢的原因可能是vv_final 越来越大,试试proc append 代替data 步
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
17#
 楼主| 发表于 2011-4-6 11:27:07 | 只看该作者

Re: 请教一个从两个表提取数据的问题

通常一周的实际lag是5天,lag=125就相当于25周,至少175天,加上别的假期啥的,需要放宽到200~

我在试试看,多谢 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-3 09:24 , Processed in 0.071621 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表