SAS中文论坛

标题: 交易记录修正问题 [打印本页]

作者: shiyiming    时间: 2009-9-9 08:08
标题: 交易记录修正问题
最近数据处理碰到如下问题,请教。
数据格式如下:
company   date  stock   share
1            2003-6-30  000001   34567
1           2003-6-30  000002    56789
1    2003-6-30   000003   12345
2   2003-6-30    000001   345
2  2003-6-30    000002    123
1   20004-6-30     000001    12345
1 20004-6-30    000003      54321

大致这样的。想通过持仓数量考虑公司是都增持股票还是减仓。 如果stock 的代码在前后日期都出现好办,但是是如果股票全部减仓,那么该代码不会在出现,如上述数据中的公司1 持有000002 的情况,这是时候也要考虑000002 被卖出的信息。

上述问题如何解决?是不是将前期的股票代码在第二期补全纪录,然后再考虑?往高手指点。谢谢!
作者: shiyiming    时间: 2009-9-9 11:06
标题: Re: 交易记录修正问题
每个company的每只stock是只有期初期末2条记录,还是有N条交易记录?
[code:2td93s6v]data raw;
        input company date yymmdd10. stock $ share;
        format date yymmdd10.;
datalines;
1 2003-6-30 000001 34567
1 2003-6-30 000002 56789
1 2003-6-30 000003 12345
2 2003-6-30 000001 345
2 2003-6-30 000002 123
1 2004-6-30 000001 12345
1 2004-6-30 000003 54321
;

proc sort data=raw out=temp;
        by company stock date;
run;

data temp2;
        missing x;
        retain company stock date_start share_start date share share_diff;
        do _n_=1 by 1 until(last.stock);
                set temp;
                by company stock date;
                if _n_=1 then do;
                        share_start=share;
                        date_start=date;
                end;
        end;
        share_diff=share-share_start;
        if share_diff=0 then do;
                share_diff=-share_start;
                share=.x;
                date=.x;
        end;
        rename share=share_end date=date_end;
        format date_start yymmdd10.;
run;[/code:2td93s6v]
作者: shiyiming    时间: 2009-9-9 11:16
标题: Re: 交易记录修正问题
楼上代码很好,只是有个局限,如果数据量很大,甚至达到数万条的话就行不通了。
作者: shiyiming    时间: 2009-9-9 18:09
标题: Re: 交易记录修正问题
[code:3ua8ek3m]data raw;
   input company date yymmdd10. stock $ share;
   format date yymmdd10.;
datalines;
1 2003-6-30 000001 34567
1 2003-6-30 000002 56789
1 2003-6-30 000003 12345
2 2003-6-30 000001 345
2 2003-6-30 000002 123
1 2004-6-30 000001 12345
1 2004-6-30 000003 54321
;

proc sort data=raw out=temp;
   by company stock date;
run;

data stock_start stock_end;
        set temp;
        by company stock;
        if first.stock then output stock_start;
        if last.stock then output stock_end;
run;

proc sql noprint;
        create table temp as
                select a.company, a.stock, a.date as date_start, a.share as share_start,
                                b.date as date_end, b.share as share_end,
                                case share_start-share_end
                             when 0 then -share_start
                             else share_start-share_end
                                end as share_diff
                        from stock_start a, stock_end b
                        where a.company=b.company and a.stock=b.stock;
quit;[/code:3ua8ek3m]
作者: shiyiming    时间: 2009-9-10 13:24
标题: Re: 交易记录修正问题
谢谢!

hopewell 的方法并没有解决我的问题/。

学习了sas sql 的又一新招。
作者: shiyiming    时间: 2009-9-10 20:44
标题: Re: 交易记录修正问题
我没辙了,祝你好运吧 <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->




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