楼主: shewenhao
8627 30

[原创博文] 如何提高sas的data step的读取速度 [推广有奖]

  • 1关注
  • 7粉丝

讲师

42%

还不是VIP/贵宾

-

威望
0
论坛币
39196 个
通用积分
12.7999
学术水平
4 点
热心指数
6 点
信用等级
3 点
经验
563 点
帖子
235
精华
0
在线时间
616 小时
注册时间
2008-3-7
最后登录
2023-5-11

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
本人用sas进行些股票的研究。
数据是从大智慧上拷贝的,格式如下:

一只股票一个txt文件,有2036只股票;每只股票记录的天数大概在1500天左右,每天有8个变量(开盘,最高,最低。。。等)

用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的存储大家能给点建议么?谢谢
二维码

扫码加我 拉你入群

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

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

关键词:Data step sas的 Data Step 如何提高 大智慧 如何 2036 记录 开盘

本帖被以下文库推荐

沙发
木须0329 发表于 2011-1-17 22:41:46 |只看作者 |坛友微信交流群
我学SAS也是出于想用统计分析研究证券投资,这个问题我也很兴趣,不过现在我刚学帮不了你,坐等高手解答吧。

使用道具

藤椅
shewenhao 发表于 2011-1-17 22:57:51 |只看作者 |坛友微信交流群
我听说etl这个部分是不是对data专门的工具,大家都来谈谈。

使用道具

板凳
soporaeternus 发表于 2011-1-18 09:08:06 |只看作者 |坛友微信交流群
这个把它们全部set在一起可以吗?
Let them be hard, but never unjust

使用道具

报纸
shewenhao 发表于 2011-1-18 17:03:14 |只看作者 |坛友微信交流群
4# soporaeternus
多谢有心人的回答,

我现在的方法就是类似于:

data 旧的file;
      set 旧的file 新的一只股票的file;
run;

旧的file就比如已经集成了几百只股票的file,这个方法一开始很快,但是到了大概600多只股票的时候就大概10秒才能新加一个股票,而且我还有2036-600只股票等着。

请问有什么好办法么?

使用道具

地板
baoaibaobao 发表于 2011-1-18 17:13:47 |只看作者 |坛友微信交流群
shewenhao 发表于 2011-1-18 17:03
4# soporaeternus
多谢有心人的回答,

我现在的方法就是类似于:

data 旧的file;
      set 旧的file 新的一只股票的file;
run;

旧的file就比如已经集成了几百只股票的file,这个方法一开始很快,但是到了大概600多只股票的时候就大概10秒才能新加一个股票,而且我还有2036-600只股票等着。

请问有什么好办法么?
我想4# soporaeternus 的意思应该是这个吧
9.2 SAS,用在宏里面,
set %do i = 1 %to 2036; data&i  %end;;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
shewenhao + 1 + 1 + 1 总是很给力

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

7
soporaeternus 发表于 2011-1-18 17:14:10 |只看作者 |坛友微信交流群
set data1 data2......data2036;
用宏控制下dataset的名字
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
shewenhao + 1 + 1 + 1 总是很给力

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

Let them be hard, but never unjust

使用道具

8
soporaeternus 发表于 2011-1-18 17:17:03 |只看作者 |坛友微信交流群
6# baoaibaobao
9.2貌似可以set data1-dataXXX;

楼主的dataset名不规则,不过用宏控制下的话,也是可以的,难度等价于楼主导入这些数据时对dataset的命名

其实一开始导入的时候就做在一起也是可以的......
Let them be hard, but never unjust

使用道具

9
shewenhao 发表于 2011-1-18 20:56:02 |只看作者 |坛友微信交流群
8# soporaeternus 多谢回复
我试试你这个方法,一开始我觉得股票的symbo不是很规律,比如有600004 600005 然后下一个股票会跳到600008因为600006 600007可能都退市了。不过用这个set data1-datan的方法其实也可,sas会忽略中间的缺失值的。

多谢。至于一开始为啥不一起读入也是想先个股存数据,在合并起来横向比较。


我去试试,多谢啦!!!!

使用道具

10
shewenhao 发表于 2011-1-18 21:45:05 |只看作者 |坛友微信交流群
8# soporaeternus
我安装的是9.1.3最全的那个版本,没有9.2怎么办?没法用data x1-x100这个方法,


40   data combine;
41       set x1-x2;
               -
               22
                --
                202
ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string, (, ;, END, KEY, KEYS, NOBS, OPEN, POINT,
              _DATA_, _LAST_, _NULL_.

ERROR 202-322: The option or parameter is not recognized and will be ignored.

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-19 03:39