SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

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

练手系列3:表关联与累计值计算

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
21#
 楼主| 发表于 2008-7-15 13:18:56 | 只看该作者

Re: 练手系列3:表关联与累计值计算

大家可以比较一下各种方法的效率,[url=http://www.sas.com/offices/NA/canada/newsletter/insights/sep05/SAS9_Features_Function.pdf:2ria7ohe]参考文档[/url:2ria7ohe]。
[img:2ria7ohe]http://p13.facemm.net/p.aspx?u=v20_p13_p_0807151312428702_0.jpg[/img:2ria7ohe]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
22#
 楼主| 发表于 2010-12-19 17:21:47 | 只看该作者

Re: 练手系列3:表关联与累计值计算

典型的table lookup问题
十分巨大的master数据集,非常小的交易数据集,这种情况对交易数据集做索引,然后查询,速度非常快,不比什么hash表之类的慢,因为相邻数据已经预读入cache了
我经常做这种table lookup,发现在这种情况下hash表还真没有啥优势,也许我们公司的存储系统调教的比较好,如果是在PC上搞的话,把a表调入内存library或者用sasfile也许更好

[code:2wmz580v]
data a;
infile datalines;
input name $ date:yymmdd10. value;
format date yymmdd10.;
datalines;
A 20070101 1
A 20070102 2
A 20070103 3
A 20070104 4
A 20070105 5
A 20070106 6
A 20070107 7
B 20070101 8
B 20070102 9
;
run;

data b;
infile datalines;
input name $ sdate:yymmdd10. edate:yymmdd10.;
format sdate edate yymmdd10.;
datalines;
A 20070102 20070106
A 20070101 20070104
B 20070101 20070102
;
run;

proc datasets library=work nolist;
        modify a;
                index create idx=(name  date);
run;quit;

data c;        
        set b;
                date=sdate;
                set a key=idx;
                svalue=value;  evalue=.; tvalue=value;
                do date=(sdate+1) to edate;
                     set a key=idx;
                         select (_iorc_);
                               when(%sysrc(_sok))         tvalue=tvalue+value;
                                   when(%sysrc(_dsenom))  _error_=0;
                                   otherwise;
                        end;
            end;
                evalue=value;               
                keep name sdate  edate  svalue  evalue  tvalue;
run;
[/code:2wmz580v]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
23#
 楼主| 发表于 2010-12-19 19:26:01 | 只看该作者

Re: 练手系列3:表关联与累计值计算

翻译一下:“叶问师傅,谁让你在这里教拳的?咏春有这么厉害吗?怕是遇到洪拳就不给力了吧?!” <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
开个玩笑。的确hash在实际应用中没那么广泛和出色,的确现需要与系统组配合先做系统调优,真不太好搞。一语中的,一针见血啊。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-3 16:16 , Processed in 0.075428 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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