作者liton (欧吉桑留学生)
看板Statistics
标题Re: [问题] SAS跑大量资料所需的时间
时间Tue Mar 17 22:49:28 2009
※ 引述《fairwind (应天风)》之铭言:
: 我今天有请人测了一下
: data5G
: 笔数80万笔
:
: sas code 大概长这样吧
: ----------
: proc sort data=abc
: by var_a
: run;
:
: 1.在C:下
: real time:5:30
: cpu time:0:30
:
: 2.装在ramdisk下 (ramdisk有9G)
: 不管怎麽试都会出现 out of resource?
: 然後只能中止程式
: 想请问这里是什麽问题?
: 谢谢
试着监控你放work这个lib的实体目录 看看档案的增长状况
之前的经验是程式写错 造成资料无限制膨胀然後爆掉
或是 work的lib设到C碟去了 C碟哪够这样操
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.112.86.144
: → kingbee:我猜因该是SAS在读取时快取档案非常大 ramdisk的限制 03/17 16:10
: → kingbee:在控制台那边监控看看 不知道是不是 我有接触过健保资料 03/17 16:11
: → kingbee:上百万笔连读进去都等快20分钟了 早期更不用说 03/17 16:11
IO本来就很慢的
我做个两百M的extraction都够我抽根菸了
: → kingbee:你的语法那边 by 後面是不是没加分号; 03/17 16:13
: 推 pohsin:还有一个方法可以参考,尽量不要排序,排序很花时间,尽量 03/17 19:52
: → pohsin:用proc sql的方式来处理资料,可以不用排序,速度上快很多 03/17 19:53
在几万笔的小资料量下
没有经过sort的SQL指令的确会比较快
但是资料量一大 真的建议要先sort过
不然SAS不会那麽没事找事做
一大堆需要先sort的指令怎不先帮你sort过才执行
扣除IO的因素
很多资料处理很慢往往是因为资料结构没做好
资料结构往往是非IT人员最容易乱搞的地方
反正资料结构弄好跑1分钟也是跑
跑1小时也是跑 反正硬体这麽便宜 就给它挂上去
我不知道原po的资料长怎样 也不太清楚你所谓的"很基本的程式"
扣除硬体因素
建议的方式有
1.加index
这技巧比较难一点 你可以试着去找网路上的说明
2.以数字处理
例如在合并的时候 栏位值是"1" 和栏位值是1
处理速度就有差
当上百万笔在处里的时候 差的可能是一包菸时间了
同样的 原po的程式中
: proc sort data=abc
: by var_a
: run;
var_a如果刚好是 数字型的文字
你自己可以试试看时间差多少
3.多下点条件值 或是先删除你之後根本不会用到的资料
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.167.189.144
※ 编辑: liton 来自: 118.167.189.144 (03/17 23:01)
1F:→ kingbee:请问 所谓的index? 03/18 09:49
2F:→ liton:www2.sas.com/proceedings/sugi29/123-29.pdf 03/18 22:17
3F:→ liton:SAS的index文章很少 SQL就很多了 03/18 22:18
4F:→ liton:index涉及资料结构的规划 已经不单单是程式的问题了 03/18 22:18