SAS中文论坛

标题: 请教各位大大一个数据编程问题 [打印本页]

作者: shiyiming    时间: 2009-9-21 03:47
标题: 请教各位大大一个数据编程问题
现有数据库格式如下:rq表示日期, zjzh表示股票帐户,zqdm表示股票代码,cjsl表示成交数量,pg表示账面盈利,pl表示账面亏损,rg表示兑现盈利,rl表示兑现亏损。

rq        zjzh        zqdm        cjsl        pg        pl        rg        rl
2007-9-28        090300000108        600684        0        0        1        0        0
2007-9-28        090300000108        600836        0        0        1        0        0
2007-9-28        090300000108        601939        0        1        0        0        0
2007-9-28        090300002100        600005        10000        1        0        0        0
2007-9-28        090300002100        600231        0        1        0        0        0
2007-9-28        090300002100        600681        0        0        1        0        0
2007-9-28        090300002100        600851        -2000        0        0        1        0
2007-9-28        090300002100        600873        10000        0        0        0        0
2007-9-28        090300002100        601808        -1000        0        0        1        0
2007-9-28        090300002302        000422        0        1        0        0        0
2007-9-28        090300002302        000686        0        0        0        0        0
2007-10-8        090300000108        600684        0        0        1        0        0
2007-10-8        090300000108        600836        0        0        0        0        0
2007-10-8        090300000108        601939        0        1        0        0        0
2007-10-8        090300002100        600005        -10000        0        0        1        0
2007-10-8        090300002100        600231        0        1        0        0        0
2007-10-8        090300002100        600681        0        0        1        0        0
2007-10-8        090300002100        600873        -10000        0        0        0        1
2007-10-8        090300002302        000422        0        1        0        0        0
2007-10-8        090300002302        000686        0        1        0        0        0
2007-10-9        090300000108        600684        0        0        1        0        0
2007-10-9        090300000108        600836        0        1        0        0        0
2007-10-9        090300000108        601939        0        1        0        0        0
2007-10-9        090300002100        600231        0        1        0        0        0
2007-10-9        090300002100        600681        0        0        1        0        0
2007-10-9        090300002100        601088        1000        1        0        0        0
2007-10-9        090300002100        601939        10000        0        0        0        0
2007-10-9        090300002302        000422        0        1        0        0        0
2007-10-9        090300002302        000686        -500        0        0        1        0

现在要计算这样几个指标:每一天全市场中那些当天有卖出股票(cjsl<0)所有的投资者的pg的和,pl的和,rg的和,rl的和。


具体要求如下:如果对于投资者i来说,在第t个交易日中他当天cjsl<0(即当天他卖出了股票), 那么查看该投资者其t-1个交易日中(注意t-1天可能不是交易日)的交易记录,查看其所有股票pg(账面盈利)是否为0,若为0,则在第t个交易日中不予计算,如果其pg>0,则予以计算。
作者: shiyiming    时间: 2009-9-21 05:24
标题: Re: 请教各位大大一个数据编程问题
proc sort data=a0;
by zjzh rq;
run;

data a1;
set a0;
by zjzh;
retain pg_last;
indic=0;
if cjsl<0 and pg_last>0 then
indic=1;
if last.zjzh then pg_last=0;
else pg_last=pg;
if indic=1;
run;

proc sql;
create table a2 as
select rq, sum(pg) as Sum_pg,
sum(pl) as Sum_pl,
sum(rg) as Sum_rg,
sum(rl) as Sum_rl
from a1
group by rq
order by rq
;
drop table a1;
quit;
作者: shiyiming    时间: 2009-9-21 12:32
标题: Re: 请教各位大大一个数据编程问题
谢谢你了,但是你这个程序最后输出结果是错误的啊
作者: shiyiming    时间: 2009-9-21 12:44
标题: Re: 请教各位大大一个数据编程问题
如果是这样,你需要把你要的结果说得再清楚一点,或者做一个例子
作者: shiyiming    时间: 2009-9-21 13:08
标题: Re: 请教各位大大一个数据编程问题
呵呵谢谢你。 应该分为以下这样的三步:
1.计算出每天每个帐户i的pg之和spg;

2.在t+1天时, 对于投资者i来说,只要其账户中有一个cjsl<0(即代表他当天有卖出股票),则看在第t天其spg是否大于0,如果spg>0,则其t+1天的所有记录(不管cjsl是否<0,都算其记录)中的pg pl rg rl保持不变,若spg=0,则其在t+1天所有记录(不管cjsl是否<0,都算其记录)中的pg pl rg rl全部为0;

3. 依据第二步算出的结果,计算市场中当天卖出股票(即cjsl<0)的投资者的所有记录的pg之和、 pl 之和、rg之和、 rl之和
作者: shiyiming    时间: 2009-9-21 13:48
标题: Re: 请教各位大大一个数据编程问题
proc sort data=a0;
by zjzh rq;
run;

data a01;
set a0;
by zjzh rq;
retain cjsl_indic 0;
if first.zjzh or first.rq then cjsl_indic=0;
if cjsl<0 then cjsl_indic=1;
run;

proc sql;
create table a02 as
select
rq, zjzh,
sum(pg) as spg,
sum(pl) as spl,
sum(rg) as srg,
sum(rl) as srl,
sum(cjsl_indic) as scjsl
from a01
group by zjzh, rq
order by zjzh,rq
;
quit;


data a1;
set a02;
by zjzh;
retain pg_last;
indic=0;
if scjsl>0 and pg_last>0 then
indic=1;
if last.zjzh then pg_last=0;
else pg_last=spg;
if indic=1;
run;

proc sql;
create table a2 as
select rq, sum(spg) as Sum_pg,
sum(spl) as Sum_pl,
sum(srg) as Sum_rg,
sum(srl) as Sum_rl
from a1
group by rq
order by rq
;
drop table a1, a0, a01, a02;
quit;
作者: shiyiming    时间: 2009-9-21 13:59
标题: Re: 请教各位大大一个数据编程问题
谢谢啦




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