SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 726|回复: 1
打印 上一主题 下一主题

请教一个问题:如何补全持仓情况

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-7-29 22:01:42 | 只看该作者

请教一个问题:如何补全持仓情况

现有以下数据:
rq        ZJZH        ZQDM        a        b        price        zqye        CCJSL        CZJFSS
2005-1-4        090100005019        600900        -26000        225884.64        8.687870769        0        653595        -1063293.34
2005-1-4        090100005019        600901        -26000        225884.64        8.687870769        0        653595        -1063293.34
2005-1-5        090100005019        600901        300        -2700        9        300        300        -2700
2005-1-4        090100005019        002025        -200        3767.38        18.8369        300        1100        -7413.88
2005-1-4        090100005019        002031        200        -1872.73        9.36365        2200        200        -1872.73
2005-1-6        090100005019        002031        300        -2838.6        9.462        2500        500        -4711.33
2005-1-4        090100005729        600688        900        -4251.3        4.723666667        900        900        -4251.3
2005-1-4        090100005729        600896        -1400        7294.81        5.210578571        900        4700        -15054.67

想要得到一下数据
rq        ZJZH        ZQDM        a        b        price        zqye        CCJSL        CZJFSS
2005-1-4        090100005019        600900        -26000        225884.64        8.687870769        0        653595        -1063293.34
2005-1-4        090100005019        600901        -26000        225884.64        8.687870769        0        653595        -1063293.34
2005-1-5        090100005019        600901        300        -2700        9        300        300        -2700
2005-1-6        090100005019        600901        0        0        9        300        300        -2700
2005-1-4        090100005019        002025        -200        3767.38        18.8369        300        1100        -7413.88
2005-1-5        090100005019        002025        0        0        18.8369        300        1100        -7413.88
2005-1-6        090100005019        002025        0        0        18.8369        300        1100        -7413.88
2005-1-4        090100005019        002031        200        -1872.73        9.36365        2200        200        -1872.73
2005-1-5        090100005019        002031        0        0        9.36365        2200        200        -1872.73
2005-1-6        090100005019        002031        300        -2838.6        9.462        2500        500        -4711.33
2005-1-4        090100005729        600688        900        -4251.3        4.723666667        900        900        -4251.3
2005-1-5        090100005729        600688        0        0        4.723666667        900        900        -4251.3
2005-1-6        090100005729        600688        0        0        4.723666667        900        900        -4251.3
2005-1-4        090100005729        600896        -1400        7294.81        5.210578571        900        4700        -15054.67
2005-1-5        090100005729        600896        0        0        5.210578571        900        4700        -15054.67
2005-1-6        090100005729        600896        0        0        5.210578571        900        4700        -15054.67


计算规则:
1.如果这个zjzh当天的zqye为0,且第二天的交易没有出现这个股票zqdm的交易,则那么第二天的数据库中这个zjzh中这只股票就不再出现。正如zqdm为600900的股票。
2.如果这个zjzh当天的zqye为0,且第二天的交易出现这个股票zqdm的交易,则那么第二天的数据库中这个zjzh中这只股票仍然保留第二天的交易记录。正如zqdm为600901的股票
3.如果这个zjzh当天的zqye不为0,且第二天的交易没有出现这个股票zqdm的交易,那么第二天数据库中这个zjzh对应的这只股票的a=0,b=0,其他数据price,        zqye,CCJSL,CZJFSS则复制前一天的对应的记录。例如这里的600688和600896
4.如果这个zjzh当天的zqye不为0,且第二天的交易出现这个股票zqdm的交易,则那么第二天的数据库中这个zjzh中这只股票仍然保留第二天的交易记录。正如zqdm为002031的股票。
谢谢各位大大了
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-7-30 22:54:07 | 只看该作者

Re: 请教一个问题:如何补全持仓情况

我的答案有的繁琐,还是抛砖引玉吧,希望有简单答案的朋友一定把你的程序贴出来啊
data raw;
input rq yymmdd10. ZJZH : $15. ZQDM $ a      b      price     zqye   CCJSL  CZJFSS;
format rq yymmdd10.;
cards;
2005-1-4 090100005019 600900 -26000 225884.64 8.687870769 0    653595   -1063293.34
2005-1-4 090100005019 600901 -26000 225884.64 8.687870769 0 653595 -1063293.34
2005-1-5 090100005019 600901 300 -2700 9 300 300 -2700
2005-1-4 090100005019 002025 -200 3767.38 18.8369 300 1100 -7413.88
2005-1-4 090100005019 002031 200 -1872.73 9.36365 2200 200 -1872.73
2005-1-6 090100005019 002031 300 -2838.6 9.462 2500 500 -4711.33
2005-1-4 090100005729 600688 900 -4251.3 4.723666667 900 900 -4251.3
2005-1-4 090100005729 600896 -1400 7294.81 5.210578571 900 4700 -15054.67
;
run;

proc sort data=raw;
by zjzh zqdm rq;
run;

proc freq data=raw noprint;
tables zjzh*zqdm*rq / sparse out=new(drop=percent);
run;

data raw;
merge raw new;
by zjzh zqdm rq;
run;

proc sort data=raw;
by zjzh zqdm;
run;

data raw;
set raw;
by zjzh zqdm rq;
array aa(4) price zqye ccjsl czjfss;
array bb(4);
retain bb1 bb2 bb3 bb4;
do i=1 to 4;
if aa(i)^=. then  bb(i)=aa(i);
else if first.zqdm then bb(i)=.;
end;
if bb2>0 then output;
else if zqye=0 then output;
drop price zqye ccjsl czjfss count i;
run;

data result(rename=(bb1=price bb2=zqye bb3=ccjsl bb4=czjfss));
set raw;
if a=. then a=0;
if b=. then b=0;
run;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 00:04 , Processed in 0.067675 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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