楼主: 西瓜小新
3509 7

金融时间数据序列的相邻数据记录比较问题,谢谢大家了 [推广有奖]

  • 0关注
  • 0粉丝

已卖:23份资源

本科生

49%

还不是VIP/贵宾

-

威望
0
论坛币
1136 个
通用积分
0
学术水平
1 点
热心指数
2 点
信用等级
0 点
经验
858 点
帖子
143
精华
0
在线时间
47 小时
注册时间
2007-12-10
最后登录
2024-8-10

楼主
西瓜小新 发表于 2008-9-9 17:34:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我是个新手,现在将从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

请问如何编写?是要用到sql过程和语句吗?(这个表的记录很大,超过了Excel的65525的记录了,不能在Excel里面做,Excel里面很简单)才能达到上述要求,写的比较啰嗦,尽量想比较详细,谢谢大家

我想可能要用到Dif 差分的办法来实现,麻烦哪位高手能不能给个具体指导?
二维码

扫码加我 拉你入群

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

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

关键词:数据记录 EXCEL exce xcel 交易数据 金融 时间 序列 相邻 数据记录

回帖推荐

hesummar 发表于7楼  查看完整内容

提供给你本人一个想法及程序:1.首先读入文件,这个我就不说了。2.比较price 跟上一个记录不相等的情况,这也是非常easy的事情。3.比较price跟上一记录相等的问题,我想这个是一个比较难得问题。经过2.这个步骤以后,为空的就是那些price和上一记录相同的obs了。这时我的方法是retain上面实际成交,这样,当有多个连续的记录时,就只保存第一个实际交易了,恰恰就是这个第一相等的值的实际交易量决定了后面相等值的符号。下面我我大 ...

PharmD 发表于4楼  查看完整内容

data test;... (load your dataset here)Prev成交价格 = lag1(成交价格);select;when (成交价格>=Prev成交价格) 实际成交 = 成交数量;when (成交价格<Prev成交价格) 实际成交 = 0-成交数量;otherwise;drop Prev成交价格;run;Of course you need to change "成交价格" and so on to your actual variable names. Have fun with SAS!

本帖被以下文库推荐

沙发
wingleslie 发表于 2008-9-9 17:42:00
这个什么东西啊

藤椅
西瓜小新 发表于 2008-9-9 17:44:00
是股票的高频金融成交序列,就是逐笔成交数据

板凳
PharmD 发表于 2008-9-10 02:36:00

data test;

... (load your dataset here)

Prev成交价格 = lag1(成交价格);

select;
when (成交价格>=Prev成交价格) 实际成交 = 成交数量;

when (成交价格<Prev成交价格) 实际成交 = 0-成交数量;

otherwise;

drop Prev成交价格;

run;

Of course you need to change "成交价格" and so on to your actual variable names. Have fun with SAS!

已有 1 人评分论坛币 收起 理由
bakoll + 3 精彩帖子

总评分: 论坛币 + 3   查看全部评分

报纸
西瓜小新 发表于 2008-9-10 06:49:00
谢谢楼上的这位兄弟了,我把编辑好后的运行结果给你看看,可能还有部分问题,也许是我编的不对,麻烦你看看

数据集采用的子集的方式,这个会有问题吗?

51   data Level2.Zglt3;
52
53     set Level2.Zglt;
54
55   Prevprice = lag1(price);
56
57   select;
58   when (price>=Prevprice) sjvol = vol;
59
60   when (price<Prevprice) sjvol = 0-vol;
61
62   otherwise;
63
64   drop Prevprice;
     ----
     180
ERROR 180-322: 语句无效或未按正确顺序使用。

65
66   run;

66   run;
        -
        117
ERROR 117-185: 有 1 个未闭合的 SELECT 块。

NOTE: SAS 系统由于错误而停止了该步的处理。
WARNING: 数据集 LEVEL2.ZGLT3 可能不完整。该步停止时,共有 0 个观测和 6 个变量。
WARNING: 数据集 LEVEL2.ZGLT3 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.01 秒
      CPU 时间         0.01 秒



地板
西瓜小新 发表于 2008-9-10 08:19:00
非常谢谢楼上的兄弟,在oterwies;语句后再加上End;就可以运行了。

但判断的原则还有点问题,特别是:2.如果二者价格相等,则前面实际成交值为正,那么该笔实际成交也为正,如果为负,该笔实际成交也为负
现在我输出的实际成交结果是:如果2者价格相等,实际成交均为负。

可能还要修改下when语句,麻烦兄弟和其他朋友帮忙看看吧!多谢了

7
hesummar 发表于 2008-9-10 21:39:00
提供给你本人一个想法及程序:1.首先读入文件,这个我就不说了。2.比较price 跟上一个记录不相等的情况,这也是非常easy的事情。3.比较price跟上一记录相等的问题,我想这个是一个比较难得问题。经过2.这个步骤以后,为空的就是那些price和上一记录相同的obs了。这时我的方法是retain上面实际成交,这样,当有多个连续的记录时,就只保存第一个实际交易了,恰恰就是这个第一相等的值的实际交易量决定了后面相等值的符号。下面我我大概写的一个程序,希望对你有用:
options mprint mlogic symbolgen;
%MACRO test;
    data work.a;
        infile 'd:\test\test.txt' dlm=' ' FIRSTOBS=2;
        length time 8 price 8 quantity 8 value 8;
        input time:time8. price quantity value;
    run;

    PROC SORT DATA=WORK.A;BY time;RUN;

    DATA work.b;
        SET work.a;
        RETAIN actual;
        lastestObs=LAG1(price);
        if price gt lastestObs then
            actual=quantity;
        else if price lt lastestObs then
            actual=-quantity;
    RUN;
    DATA work.c;
        set work.b;
        IF price eq lastestObs THEN DO;
            if actual gt 0 then
                actual=quantity;
            else
                actual=-quantity;
        END;
    run;

%MEND;
%test
已有 1 人评分论坛币 收起 理由
bakoll + 3 精彩帖子

总评分: 论坛币 + 3   查看全部评分

8
西瓜小新 发表于 2008-9-10 22:19:00
楼上的兄弟你的思路非常非常好,实际上,输出的数据集b正我所欲也!赞一个!
刚回到学校,看见你的程序,稍微改了下到SAS试验成功!

非常非常感谢Hesummar兄弟!以后还要向你和各个高手请教!

恳请版主为你加Money!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 01:10