SAS中文论坛

标题: 如何提高sas的data step的读取速度 [打印本页]

作者: shiyiming    时间: 2011-1-17 22:24
标题: 如何提高sas的data step的读取速度
用sas data step 读入,并转化成sas内部的data; 例如A600000.sas7data,存放在不是work的一个逻辑区下保存。在读入txt文件的时候用的是data step方法,并用macro,一个股票一个股票的读入。这个阶段还好,实际用一个 %do i = 1 to 2036 %end,很快就可以读好。这样每个data有约1500*8 个记录,同时有2036个这样的data。

问题来了,现在我想把他们join到一个data里边,这样就可以方便的根据时间或者symbol来读取股票数值了。因为单个股票只能进行个例分析,如果想看某一个时间段的股票相对表现,个人认为这样存放data比较方便。

但是这样的话生成的data有(1500*2036)row 8 column的dimensions,我的方法是一个一个的往一个总的data里merge或者join。但是无论用data step还是sql的方法,结果都很差,到最后就是10几秒才能merge一个股票,因为前期merge的data很大了,还要读取,用macro的loop方法每一次都要读取一个股票数据和前边merge好的data,这样的话很慢。

对sasdata的存储大家能给点建议么?谢谢
作者: shiyiming    时间: 2011-1-18 00:35
标题: Re: 如何提高sas的data step的读取速度
merge 的方法确切吗?你不是要纵向堆积吗?效率往往取决于此程序是否反复运行。我看你是一次性生成数据,还管什么效率?更何况3百万的数据量也不是很大。
作者: shiyiming    时间: 2011-1-18 18:22
标题: Re: 如何提高sas的data step的读取速度
to jingju11
他只有1500行,2000多列~~
问题出在她不使用多个表同时merge..
我现在merge的一个longitudinal表就有近30,000行,3000列,很快就搞定~~
逻辑:
首先更换每个表的column名,hight_68899, low_68899这种类型,只保留key word一样,即date, time依旧,
然后sort所有表,
然后data out; merge data68899 data778888 data99999 ......;by date time;run;
然后? 然后喝茶去吧~~
更换column名我当然是用macro搞定了,我可不会那么疯狂,全部手写~~;
作者: shiyiming    时间: 2011-1-20 04:38
标题: Re: 如何提高sas的data step的读取速度
to shewenhao
对了,为什么不用infile filevar来读txt文件?这样你可以得到一个datastes.. 然后用proc transpose就可以得到你想要的结果了~~
整个程序就3步,
第一步: 通过pipe把文件传给data step 的infile fileref;
第二步: proc sort;
第三步: proc transpose;
然后就可以去喝咖啡了~~




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2