SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 865|回复: 5
打印 上一主题 下一主题

[转贴] 金融时间数据序列的相邻数据记录比较问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-9-10 09:53:41 | 只看该作者

[转贴] 金融时间数据序列的相邻数据记录比较问题

现在将从Txt文本导入到数据库中的表中(高频金融时间数据,每天记录可能高达10-15万条记录),结构如下:

成交时间 成交价格 成交数量 成交金额
09:25:00 9.550 200 1910.000
09:30:00 9.540 500 4770.000
09:30:00 9.540 100 954.000
09:30:00 9.530 1000 9530.000
09:30:00 9.520 9000 85680.000
09:30:00 9.520 1000 9520.000
09:30:00 9.520 600 5712.000
09:30:00 9.530 2000 19060.000
09:30:00 9.540 1000 9540.000
09:30:01 9.540 900 8586.000
09:30:01 9.540 300 2862.000
09:30:01 9.540 500 4770.000
09:30:01 9.540 1500 14310.000
09:30:01 9.520 5000 47600.000

注意这个交易数据中的记录是按时间顺序排列,不能打乱,否则没有意义。
现在的要求是,要生成一个新的字段 :“实际成交”,实际成交值根据下面的原则产生:

1.比较时间相邻的二个交易价格,如果后一笔交易价格比前者高,那么实际成交=成交数量(此笔成交数量为正),
否则,实际成交=-成交数量(此笔成交数量为负)。

2.如果二者价格相等,则前面实际成交值为正,那么该笔实际成交也为正,如果为负,该笔实际成交也为负。
新表的根据上述原则,生成新字段如下:

成交时间 成交价格 成交数量 成交金额 实际成交
09:25:00 9.550 200 1910.000 200
09:30:00 9.540 500 4770.000 -500
09:30:00 9.540 100 954.000 -100
09:30:00 9.530 1000 9530.000 -1000
09:30:00 9.520 9000 85680.000 -9000
09:30:00 9.520 1000 9520.000 -1000
09:30:00 9.520 600 5712.000 -600
09:30:00 9.530 2000 19060.000 2000
09:30:00 9.540 1000 9540.000 1000
09:30:01 9.540 900 8586.000 900
09:30:01 9.540 300 2862.000 300
09:30:01 9.540 500 4770.000 500
09:30:01 9.540 1500 14310.000 1500
09:30:01 9.520 5000 47600.000 -5000
[code:1rvhyycc]/*ahuige的代码*/
data ahuige(drop=preprice presign);
  input time time8. price amount total;
  actual=amount*sign(price-preprice)+amount*presign*(price=preprice);
  retain preprice presign 0;
  preprice=price;
  presign=sign(actual);
  cards;
09:25:00 9.550 200 1910.000
09:30:00 9.540 500 4770.000
09:30:00 9.540 100 954.000
09:30:00 9.530 1000 9530.000
09:30:00 9.520 9000 85680.000
09:30:00 9.520 1000 9520.000
09:30:00 9.520 600 5712.000
09:30:00 9.530 2000 19060.000
09:30:00 9.540 1000 9540.000
09:30:01 9.540 900 8586.000
09:30:01 9.540 300 2862.000
09:30:01 9.540 500 4770.000
09:30:01 9.540 1500 14310.000
09:30:01 9.520 5000 47600.000
;
run;[/code:1rvhyycc]
[code:1rvhyycc]/*sxlion的代码*/
/*sas提供了另外一函数choosen()可使用,弥补了ifn()的不足。*/

data ahuige(drop=preprice presign);
input time time8. price amount total;
/* actual=amount*sign(price-preprice)+amount*presign*(price=preprice);*/
actual=choosen(sign(price-preprice)+2,-amount,amount*presign,amount);
retain preprice presign 0;
preprice=price;
presign=sign(actual);
cards;
09:25:00 9.550 200 1910.000
09:30:00 9.540 500 4770.000
09:30:00 9.540 100 954.000
09:30:00 9.530 1000 9530.000
09:30:00 9.520 9000 85680.000
09:30:00 9.520 1000 9520.000
09:30:00 9.520 600 5712.000
09:30:00 9.530 2000 19060.000
09:30:00 9.540 1000 9540.000
09:30:01 9.540 900 8586.000
09:30:01 9.540 300 2862.000
09:30:01 9.540 500 4770.000
09:30:01 9.540 1500 14310.000
09:30:01 9.520 5000 47600.000
;
proc print;
run;[/code:1rvhyycc]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-9-10 19:27:43 | 只看该作者

Re: [转贴] 金融时间数据序列的相邻数据记录比较问题

没看明白
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-9-11 20:06:13 | 只看该作者

Re: [转贴] 金融时间数据序列的相邻数据记录比较问题

版主能否介绍一下金融时间数据序列的相邻数据记录比较:
1)反应什么业务问题?
2)计算之前有无业务参照值(正负多少为正常)?
3)其他我没考虑到的方面...

谢谢...



----------------------
08中秋,914=815
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-9-27 09:14:05 | 只看该作者

Re: [转贴] 金融时间数据序列的相邻数据记录比较问题

多谢楼主,再一次感受到SAS功能的强大,按照习惯,我原想考虑以IF语句来写,但太复杂。第二个程序相当比较容易理解,但第一个程序有一个语句尚不太理解,actual=amount*sign(price-preprice)+amount*presign*(price=preprice);这一句中的*(price=preprice)做何解释,请楼主详解,谢谢。
另答复上一楼,这个程序用于股市成交量分析。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-9-27 10:01:35 | 只看该作者

Re: [转贴] 金融时间数据序列的相邻数据记录比较问题

[color=#0040FF:2f8lxzmc]*(price=preprice)[/color:2f8lxzmc]是布尔表达式,结果就2种:*1和*0。参考以下代码,看结果。
[code:2f8lxzmc]data class;
set sashelp.class;
if _n_ in (1, 5, 10, 15) then height=weight;
run;

data temp;
set class;
a=age*(height=weight);
b=height=weight;
run;[/code:2f8lxzmc]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-9-27 14:37:18 | 只看该作者

Re: [转贴] 金融时间数据序列的相邻数据记录比较问题

学习了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 01:27 , Processed in 0.070360 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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