SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 993|回复: 6
打印 上一主题 下一主题

请教各位大大一个数据编程问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-9-21 03:47: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,则予以计算。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-9-21 05:24:13 | 只看该作者

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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-9-21 12:32:20 | 只看该作者

Re: 请教各位大大一个数据编程问题

谢谢你了,但是你这个程序最后输出结果是错误的啊
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-9-21 12:44:52 | 只看该作者

Re: 请教各位大大一个数据编程问题

如果是这样,你需要把你要的结果说得再清楚一点,或者做一个例子
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-9-21 13:08:06 | 只看该作者

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之和
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-9-21 13:48:24 | 只看该作者

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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-9-21 13:59:58 | 只看该作者

Re: 请教各位大大一个数据编程问题

谢谢啦
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 23:18 , Processed in 0.136358 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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