sas金融计算清华朱世武数据集char04Word格式.docx
《sas金融计算清华朱世武数据集char04Word格式.docx》由会员分享,可在线阅读,更多相关《sas金融计算清华朱世武数据集char04Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
iflast.f0001;
a_state=gb008+gb009;
a_all=gb004-gb017-gb018;
/*全部a股股本,求全市场股票比率修改此处*/
datac_1(keep=suma_statesuma_allsuma_pubratio_stateratio_pub);
setcend=aaa;
suma_all+a_all;
suma_state+a_state;
suma_pub+gb016;
ratio_state=100*suma_state/suma_all;
ratio_pub=100*Suma_pub/suma_all;
Ifaaa=1;
putsuma_state/Suma_pub/suma_all/Ratio_state/ratio_pub=;
Run;
A股计算结果:
2000年12月31日:
Suma_State=215044425739
Suma_Pub=103400844064
Suma_All=346763200649
Ratio_State=62.01477704
Ratio_Pub=29.818863095
20001年8月31日:
Suma_State=287393936240
Suma_Pub=121828508426
Suma_All=438426705492
Ratio_State=65.551193082
Ratio_Pub=27.787656842
Ratio=65.551193082
4.1.3指数300成份股股本比例计算
创建数据集STALL_GENIUS:
datastall_genius;
iff0003='
A'
;
datacompufin.stall_genius;
setstall_genius;
='
18jan2001'
/*2001年1月18日前全部A股*/
setcompufin.stall_genius;
求数据集C_1,股本数据集,包括2001年1月18日前全部A股股票并标识INX300_GENIUS中的股票。
datacode300;
setcompufin.inx300_genius;
lengthf0002$6.;
ifsubstr(hstocd,1,1)='
1'
thenf0002=substr(hstocd,3,6);
2'
thenf0002=substr(hstocd,5,4);
formatf0002$6.;
procsortdata=code300;
byf0002;
procsortdata=compufin.stall_genius;
datac_1;
mergecompufin.stall_geniuscode300;
全部1127支A股股票的股本计算结果:
datac_2;
setc_1;
datac_2(keep=suma_statesuma_allsuma_pubratio_stateratio_pub);
setc_2end=aaa;
ratio_pub=100*suma_pub/suma_all;
ifaaa=1;
putsuma_state=/suma_pub=/suma_all=/ratio_state=/ratio_pub=;
计算结果:
suma_state=215416057679
suma_pub=104347783661
suma_all=347518799628
ratio_state=61.986878957
ratio_pub=30.026514759
300支成份股的股本计算结果:
datac_3;
ifhstocd=.thendelete;
a_state300=gb008+gb009;
a_all300=gb004-gb017-gb018;
datac_3(keep=suma_state300suma_all300suma_pub300ratio_state300ratio_pub300);
setc_3end=aaa;
suma_all300+a_all300;
suma_state300+a_state300;
suma_pub300+gb016;
ratio_state300=100*suma_state300/suma_all300;
ratio_pub300=100*suma_pub300/suma_all300;
putsuma_state300=;
putSuma_pub300=;
putsuma_all300=;
putRatio_state300=;
putratio_pub300=;
300成份股中股本占全部A股票(1127支)股本的相关比例计算:
datac_4;
mergec_2c_3;
ratio_all=100*Suma_all300/Suma_all;
ratio_state=100*Suma_state300/Suma_state;
ratio_pub=100*Suma_pub300/Suma_pub;
putratio_all=;
putratio_state=;
putratio_pub=;
4.2.1成指300市值比例计算
/*返回日期时间值的日期部分*/
求数据集C_1,股本数据集,包括2000年12月31日前全部A股股票并标识INX300_GENIUS中的股票。
ifsubstr(hstocd,1,3)='
116'
ifsubstr(hstocd,1,5)='
21000'
ifsubstr(f0002,1,1)='
0'
thenf0002a='
00'
||f0002;
/*||起连接作用*/
elsef0002a=f0002;
f0002=f0002a;
mergeacode300;
求2000年12月31日的个股票收盘价,个股以当天收盘价为准,如果停盘则用最近有交易日收盘价。
从行情数据集COMPUFIN.QUOT中求得有效A股数为1060支。
dataquot;
setcompufin.quot(keep=dateclprhstocd);
ifyear(date)=2000;
procsortdata=quot;
byhstocddate;
setquot;
byhstocd;
iflast.hstocd;
/*结果显示,行情数据中1060支A股有数据*/
计算2000年12月31日1060支A股的市值:
procsortdata=quot;
dataquot_c;
mergequotc_1;
a_pub=gb016;
cap_state=clpr*a_state;
cap_pub=clpr*a_pub;
cap_all=clpr*a_all;
dataquot_c(keep=sumcap_allsumcap_statesumcap_pubratio_stateratio_pub);
setquot_cend=aaa;
sumcap_all+cap_all;
sumcap_state+cap_state;
sumcap_pub+cap_pub;
ratio_state=100*sumcap_state/sumcap_all;
ratio_pub=100*sumcap_pub/sumcap_all;
putsumcap_all=;
putsumcap_state=;
putsumcap_pub=;
/*300支A股的市值数据*/
id=1;
datacap300;
mergequotc_2(drop=date);
ifid=.thendelete;
setcap300end=aaa;
state300=gb008+gb009;
pub300=gb016;
all300=gb004-gb017-gb018;
cap_state300=clpr*state300;
cap_pub300=clpr*pub300;
cap_all300=clpr*all300;
sumcap_state300+cap_state300;
sumcap_pub300+cap_pub300;
sumcap_all300+cap_all300;
ratio_state300=100*sumcap_state300/sumcap_all300;
ratio_pub300=100*sumcap_pub300/sumcap_all300;
putsumcap_state300=;
putsumcap_pub300=;
putsumcap_all300=;
putratio_state300=;
300支A股的市值占相应总市值比例计算:
mergequot_ccap300;
r300all_all=100*sumCap_all300/SumCap_all;
r300state_all=100*sumCap_State300/SumCap_all;
r300state_state=100*sumCap_State300/SumCap_state;
r300pub_all=100*sumCap_pub300/SumCap_pub;
putr300all_all=;
putr300state_all=;
putr300state_state=;
putr300pub_all=;
4.2.2行业市值比例计算
ifyear(date)=1999;
/*结果显示,行情数据中923支A股有数据*/
创建数据集STALL_GENIUS,股本数据集,包括1999年12月31日前全部A股股票。
(计算结果一共有1045支股票)
31dec1999'
/*1999年12月31日,其它时点可修改此处*/
dropf0002a;
/*结果显示,有1045支股票的股本数据*/
计算A股市值,即计算1999年12月31日923支A股的市值,结果数据集为QUOT_C:
procsortdata=stall_genius;
mergequotstall_genius;
A股总市值,即,923支A股的市值(注:
这并不是我们要的结果)
datasums(keep=sumcap_allsumcap_statesumcap_pub);
A股行业分类数据集INDCLS:
Dataindcls;
Setcompufin.indcls;
Lengthf0002$6.;
Ifsubstr(scode,1,1)='
orsubstr(scode,1,1)='
6'
;
ifsubstr(scode,1,1)='
thenf0002='
||scode;
elsef0002=scode;
/*结果显示,有1110支A股股票,但有一些没有进行分类*/
将市值数据集QUOT_C和行业分类数据集INDCLS全并,形成数据集MARKCAP:
procsortdata=quot_c;
procsortdata=indcls;
datamarkcap;
mergequot_cindcls;
/*1110个数据*/
删除数据集MARKCAP中的缺失值:
setmarkcap;
ifcap_all=.thendelete;
/*923个数据*/
按沪深两市将数据集MARKCAP分为MARKCAP_SH和MARKCAP_SZ:
datamarkcap_sh;
datamarkcap_sz;
直接输出EXCEL结果表:
%macrob(y);
procsortdata=markcap;
by&
y;
dataweights_&
y(keep=&
y);
iflast_&
y=1;
%macroa(x);
procsortdata=&
x;
procmeansdata=&
varcap_all;
outputout=bsum=sum;
procmeansdata=b;
varsum;
outputout=csum=all;
datab;
mergebc;
sumall+all;
dataa(keep=&
yweights_&
x);
setb;
weights_&
x=100*sum/sumall;
mergeweights_&
ya;
ifweights_&
x=.thenweights_&
x=0;
%menda;
%a(markcap);
%a(markcap_sh);
%a(markcap_sz);
procexportdata=weights_&
y
outfile="
d:
\基于sas系统的金融计算光盘\compufin\%str(&
y)weightsresults.xls"
dbms=excel5replace;
\基于sas系统的金融计