全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3182 6
2009-01-23

各位大侠,本人有如下问题求助:

(1)我有数据表1如下,记录了各个账户买卖股票的信息。对于每个账户下的每只股票,都只有买入和卖出时的日期及价格;

(2)我有数据表2,记录每只股票每个交易日的开盘、收盘、最高、最低等价格信息;

(3)我希望将表2的部分数据合并到表1中——每个账户每只股票(从买入到卖出后)的每个交易日的最高、最低价。

例如:对于账户“1001”,我希望得到合并后股票“600001”2007年1月5日至2007年4月12日间所有交易日的股票价格;

(4)困难1是连个表合并时需要两个by变量(股票代码、交易日期);困难2是账户“1001”和“1002”都有“600001”的交易,在按账户、股票代码排序时股票代码非自然排序

表1

账户 交易类型 股票代码 交易数量 交易日期 交易价格
1001  买入 600001 1000 2007年1月5日 5.00
1001  卖出 600001 1000 2007年4月12日 6.00
1001  买入 600002 500 2007年4月16日 4.00
1001  卖出 600002 500 2007年6月22日 3.00
1001  买入 600005 3000 2007年4月16日 5.00
1001  卖出 600005 3000 2007年4月24日 7.00
1002  买入 600001 500 2007年4月24日 3.00
1002  卖出 600001 500 2007年4月26日 4.00
1002  买入 600018 1500 2007年1月28日 5.00
1002  卖出 600018 1500 2007年6月13日 7.00
1002  买入 600039 5000 2007年1月4日 7.00
1002  买入 600039 2500 2007年2月27日 9.00
1003  买入 600002 600 2007年3月5日 7.00
1003  卖出 600002 600 2007年1月19日 6.00
1003  买入 600108 200 2007年1月31日 6.00
1003  卖出 600108 200 2007年3月27日 8.00

[此贴子已经被作者于2009-1-23 22:29:17编辑过]

二维码

扫码加我 拉你入群

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

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

全部回复
2009-1-23 22:28:00

问题重新表述

我的问题等于是:

每个账户的每只股票交易的买入(A日)和卖出日(B日)间填充上“该股票交易日(从A+1到B-1日)”。

[此贴子已经被作者于2009-1-23 22:35:11编辑过]

二维码

扫码加我 拉你入群

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

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

2009-1-24 00:18:00
表2在哪里?
二维码

扫码加我 拉你入群

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

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

2009-1-24 03:11:00

The following code add the missing date observations for the stock that were 'bought and sold at the same amount'. You may need to modify the code for that were bought/sold only.

data test;
input account $ trade  $ code $ qtr Tdate : date9. price;
datalines;
1001  b 600001 1000 05JAN2007 5.00
1001  s 600001 1000 12APR2007 6.00
1001  b 600002 500 16APR2007 4.00
1001  s 600002 500 22JUN2007 3.00
1001  b 600005 3000 16APR2007 5.00
1001  s 600005 3000 24APR2007 7.00
1002  b 600001 500 24APR2007 3.00
1002  s 600001 500 26APR2007 4.00
1002  b 600018 1500 28JAN2007 5.00
1002  s 600018 1500 13JUN2007 7.00
1002  b 600039 5000 4JAN2007 7.00
1002  b 600039 2500 27FEB2007 9.00
1003  b 600002 600 5MAR2007 7.00
1003  s 600002 600 19JAN2007 6.00
1003  b 600108 200 31JAN2007 6.00
1003  s 600108 200 27MAR2007 8.00
;
run;
proc print data=test;
format tdate mmddyy10.;
run;
proc sort data=test out=datasorted;
   by account code trade tdate;
run;
proc print data=datasorted;
    format tdate date9.;
run;

data test3 (drop= i);
   set datasorted;
   by account code;
   retain BuyDate;
   if first.code and trade ='b'  then
      do;
          BuyDate = tdate;
          output;
   end;
   if last.code and trade = 's' then
          do;  SoldDate = tdate;
             do i = BuyDate to SoldDate-1;
                tdate = i+1;
    trade = 'h/s';
    output;
             end;
       end;    
 else output;
run;
proc sort data=test3 nodup;
by account;
run;

proc print data=test3 ;
     format tdate BuyDate SoldDate date9.;
  where account = '1001' and code = '600005';
run;

                                        The SAS System        10:53 Friday, January 23, 2009 231

    Obs    account    trade     code      qtr        Tdate    price      BuyDate     SoldDate

    167     1001       b       600005    3000    16APR2007      5      16APR2007            .
    168     1001       h/s     600005    3000    17APR2007      7      16APR2007    24APR2007
    169     1001       h/s     600005    3000    18APR2007      7      16APR2007    24APR2007
    170     1001       h/s     600005    3000    19APR2007      7      16APR2007    24APR2007
    171     1001       h/s     600005    3000    20APR2007      7      16APR2007    24APR2007
    172     1001       h/s     600005    3000    21APR2007      7      16APR2007    24APR2007
    173     1001       h/s     600005    3000    22APR2007      7      16APR2007    24APR2007
    174     1001       h/s     600005    3000    23APR2007      7      16APR2007    24APR2007
    175     1001       h/s     600005    3000    24APR2007      7      16APR2007    24APR2007

二维码

扫码加我 拉你入群

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

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

2009-1-24 21:31:00

非常好的方案

方案简单易行,这就是我想要的。非常感谢yongyitian!

二维码

扫码加我 拉你入群

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

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

2009-1-31 09:25:00

合并日期新问题求助

在实际应用中我又发现问题:

(1)如果一只股票被多次买卖,其日期如何填充。

举例如下:先卖,后买,我需要填充的是这四个时点中间的日期;。

1001  s 600001 1000 05JAN2007 5.00
1001  b 600001 1000 12APR2007 6.00
1001  s 600002 500 16APR2007 4.00
1001  b 600002 500 22JUN2007 3.00

2)如何处理一日内多次交易问题

举例如下,一天内有多次交易,在填充时如何处理

1001  s 600001 1000 05JAN2007 5.00
1001  b 600001 1000 05JAN2007 5.50
1001  s 600002 500 05JAN2007 5.50
1001  b 600002 500 05JAN2007 5.00

由于数据量较大,无法一一判别

二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群