sas金融计算清华朱世武数据集char04.docx

上传人:b****5 文档编号:7384845 上传时间:2023-01-23 格式:DOCX 页数:21 大小:18.08KB
下载 相关 举报
sas金融计算清华朱世武数据集char04.docx_第1页
第1页 / 共21页
sas金融计算清华朱世武数据集char04.docx_第2页
第2页 / 共21页
sas金融计算清华朱世武数据集char04.docx_第3页
第3页 / 共21页
sas金融计算清华朱世武数据集char04.docx_第4页
第4页 / 共21页
sas金融计算清华朱世武数据集char04.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

sas金融计算清华朱世武数据集char04.docx

《sas金融计算清华朱世武数据集char04.docx》由会员分享,可在线阅读,更多相关《sas金融计算清华朱世武数据集char04.docx(21页珍藏版)》请在冰豆网上搜索。

sas金融计算清华朱世武数据集char04.docx

sas金融计算清华朱世武数据集char04

4.1.2通用计算程序

数据集准备:

(程序时点设为2000年12月31日)

dataa;

setcompufin.header_genius(keep=f0001f0002f0003f0004);

procsortdata=a;

byf0001;

run;

datab(keep=f0001gb002gb004gb008gb009gb016gb017gb018);

setcompufin.shares_genius;

procsortdata=b;

byf0001gb002;

datac;

mergeab;

byF0001;

iff0002=.thendelete;

iff0003=’A’;/*只算A股*/

run;

datac;

setc;

date=datepart(gb002);

ifdate>'31dec2000'dthendelete;/*2000年12月31日,其它时点可修改此处*/

run;

datac;

setc;

byf0001;

iflast.f0001;

run;

datac;

setc;

a_state=gb008+gb009;

a_all=gb004-gb017-gb018;/*全部a股股本,求全市场股票比率修改此处*/

run;

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

Suma_State=287393936240

Suma_All=438426705492

Ratio=65.551193082

4.1.3指数300成份股股本比例计算

创建数据集STALL_GENIUS:

dataa;

setcompufin.header_genius(keep=f0001f0002f0003f0004);

procsortdata=a;

byf0001;

run;

datab(keep=f0001gb002gb004gb008gb009gb016gb017gb018);

setcompufin.shares_genius;

procsortdata=b;

byf0001gb002;

datastall_genius;

mergeab;

byf0001;

iff0002=.thendelete;

iff0003='A';/*只算A股*/

run;

datacompufin.stall_genius;

setstall_genius;

date=datepart(gb002);

ifdate>='18jan2001'dthendelete;/*2001年1月18日前全部A股*/

run;

datacompufin.stall_genius;

setcompufin.stall_genius;

byf0001;

iflast.f0001;

run;

求数据集C_1,股本数据集,包括2001年1月18日前全部A股股票并标识INX300_GENIUS中的股票。

datacode300;

setcompufin.inx300_genius;

lengthf0002$6.;

ifsubstr(hstocd,1,1)='1'thenf0002=substr(hstocd,3,6);

ifsubstr(hstocd,1,1)='2'thenf0002=substr(hstocd,5,4);

formatf0002$6.;

run;

procsortdata=code300;

byf0002;

run;

procsortdata=compufin.stall_genius;

byf0002;

datac_1;

mergecompufin.stall_geniuscode300;

byf0002;

run;

全部1127支A股股票的股本计算结果:

datac_2;

setc_1;

a_state=gb008+gb009;

a_all=gb004-gb017-gb018;/*全部a股股本,求全市场股票比率修改此处*/

run;

datac_2(keep=suma_statesuma_allsuma_pubratio_stateratio_pub);

setc_2end=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;

计算结果:

suma_state=215416057679

suma_pub=104347783661

suma_all=347518799628

ratio_state=61.986878957

ratio_pub=30.026514759

300支成份股的股本计算结果:

datac_3;

setc_1;

ifhstocd=.thendelete;

a_state300=gb008+gb009;

a_all300=gb004-gb017-gb018;

run;

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;

ifaaa=1;

putsuma_state300=;

putSuma_pub300=;

putsuma_all300=;

putRatio_state300=;

putratio_pub300=;

Run;

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=;

run;

4.2.1成指300市值比例计算

创建数据集STALL_GENIUS:

dataa;

setcompufin.header_genius(keep=f0001f0002f0003f0004);

procsortdata=a;

byf0001;

run;

datab(keep=f0001gb002gb004gb008gb009gb016gb017gb018);

setcompufin.shares_genius;

procsortdata=b;

byf0001gb002;

datastall_genius;

mergeab;

byF0001;

iff0002=.thendelete;

iff0003='A';/*只算A股*/

run;

datacompufin.stall_genius;

setstall_genius;

date=datepart(gb002);/*返回日期时间值的日期部分*/

ifdate>='31dec2000'dthendelete;/*2000年12月31日,其它时点可修改此处*/

run;

datacompufin.stall_genius;

setcompufin.stall_genius;

byf0001;

iflast.f0001;

run;

求数据集C_1,股本数据集,包括2000年12月31日前全部A股股票并标识INX300_GENIUS中的股票。

datacode300;

setcompufin.inx300_genius;

lengthf0002$6.;

ifsubstr(hstocd,1,3)='116'thenf0002=substr(hstocd,3,6);

ifsubstr(hstocd,1,5)='21000'thenf0002=substr(hstocd,3,6);

formatf0002$6.;

run;

procsortdata=code300;

byf0002;

run;

dataa;

setcompufin.stall_genius;

lengthf0002$6.;

ifsubstr(f0002,1,1)='0'thenf0002a='00'||f0002;/*||起连接作用*/

elsef0002a=f0002;

f0002=f0002a;

run;

procsortdata=compufin.stall_genius;

byf0002;

datac_1;

mergeacode300;

byf0002;

run;

求2000年12月31日的个股票收盘价,个股以当天收盘价为准,如果停盘则用最近有交易日收盘价。

从行情数据集COMPUFIN.QUOT中求得有效A股数为1060支。

dataquot;

setcompufin.quot(keep=dateclprhstocd);

ifyear(date)=2000;

run;

procsortdata=quot;

byhstocddate;

run;

dataquot;

setquot;

byhstocd;

iflast.hstocd;

run;

dataquot;

setquot;

ifsubstr(hstocd,1,3)='116'thenf0002=substr(hstocd,3,6);

ifsubstr(hstocd,1,5)='21000'thenf0002=substr(hstocd,3,6);

iff0002=.thendelete;/*结果显示,行情数据中1060支A股有数据*/

run;

计算2000年12月31日1060支A股的市值:

procsortdata=quot;

byf0002;

dataquot_c;

mergequotc_1;

byf0002;

a_state=gb008+gb009;

a_all=gb004-gb017-gb018;

a_pub=gb016;

cap_state=clpr*a_state;

cap_pub=clpr*a_pub;

cap_all=clpr*a_all;

run;

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;

ifaaa=1;

putsumcap_all=;

putsumcap_state=;

putsumcap_pub=;

putratio_state=;

putratio_pub=;

run;

/*300支A股的市值数据*/

datac_2;

setc_1;

ifhstocd=.thendelete;

id=1;

run;

datacap300;

mergequotc_2(drop=date);

byf0002;

ifid=.thendelete;

run;

datacap300;

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;

ifaaa=1;

putsumcap_state300=;

putsumcap_pub300=;

putsumcap_all300=;

putratio_state300=;

putratio_pub300=;

run;

300支A股的市值占相应总市值比例计算:

dataa;

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=;

run;

4.2.2行业市值比例计算

dataquot;

setcompufin.quot(keep=dateclprhstocd);

ifyear(date)=1999;

run;

procsortdata=quot;

byhstocddate;

run;

dataquot;

setquot;

byhstocd;

iflast.hstocd;

run;

dataquot;

setquot;

ifsubstr(hstocd,1,3)='116'thenf0002=substr(hstocd,3,6);

ifsubstr(hstocd,1,5)='21000'thenf0002=substr(hstocd,3,6);

iff0002=.thendelete;/*结果显示,行情数据中923支A股有数据*/

run;

创建数据集STALL_GENIUS,股本数据集,包括1999年12月31日前全部A股股票。

(计算结果一共有1045支股票)

dataa;

setcompufin.header_genius(keep=f0001f0002f0003f0004);

procsortdata=a;

byf0001;

run;

datab(keep=f0001gb002gb004gb008gb009gb016gb017gb018);

setcompufin.shares_genius;

procsortdata=b;

byf0001gb002;

datastall_genius;

mergeab;

byf0001;

iff0002=.thendelete;

iff0003='A';/*只算A股*/

run;

datastall_genius;

setstall_genius;

date=datepart(gb002);

ifdate>='31dec1999'dthendelete;/*1999年12月31日,其它时点可修改此处*/

run;

datastall_genius;

setstall_genius;

byf0001;

iflast.f0001;

run;

datastall_genius;

setstall_genius;

lengthf0002$6.;

ifsubstr(f0002,1,1)='0'thenf0002a='00'||f0002;

elsef0002a=f0002;

f0002=f0002a;

dropf0002a;/*结果显示,有1045支股票的股本数据*/

run;

计算A股市值,即计算1999年12月31日923支A股的市值,结果数据集为QUOT_C:

procsortdata=quot;

byf0002;

procsortdata=stall_genius;

byf0002;

dataquot_c;

mergequotstall_genius;

byf0002;

a_state=gb008+gb009;

a_all=gb004-gb017-gb018;

a_pub=gb016;

cap_state=clpr*a_state;

cap_pub=clpr*a_pub;

cap_all=clpr*a_all;

run;

A股总市值,即,923支A股的市值(注:

这并不是我们要的结果)

datasums(keep=sumcap_allsumcap_statesumcap_pub);

setquot_cend=aaa;

sumcap_all+cap_all;

sumcap_state+cap_state;

sumcap_pub+cap_pub;

ifaaa=1;

putsumcap_all=;

putsumcap_state=;

putsumcap_pub=;

run;

A股行业分类数据集INDCLS:

Dataindcls;

Setcompufin.indcls;

Lengthf0002$6.;

Ifsubstr(scode,1,1)='0'orsubstr(scode,1,1)='6';

ifsubstr(scode,1,1)='0'thenf0002='00'||scode;

elsef0002=scode;

Run;/*结果显示,有1110支A股股票,但有一些没有进行分类*/

将市值数据集QUOT_C和行业分类数据集INDCLS全并,形成数据集MARKCAP:

procsortdata=quot_c;

byf0002;

procsortdata=indcls;

byf0002;

datamarkcap;

mergequot_cindcls;

byf0002;

run;/*1110个数据*/

删除数据集MARKCAP中的缺失值:

datamarkcap;

setmarkcap;

ifcap_all=.thendelete;

run;/*923个数据*/

按沪深两市将数据集MARKCAP分为MARKCAP_SH和MARKCAP_SZ:

datamarkcap_sh;

setmarkcap;

ifsubstr(f0002,1,1)='6';

run;

datamarkcap_sz;

setmarkcap;

ifsubstr(f0002,1,1)='0';

run;

直接输出EXCEL结果表:

%macrob(y);

procsortdata=markcap;

by&y;

dataweights_&y(keep=&y);

setmarkcap;

by&y;

iflast_&y=1;

%macroa(x);

procsortdata=&x;

by&y;

procmeansdata=&x;

varcap_all;

by&y;

outputout=bsum=sum;

run;

procmeansdata=b;

varsum;

outputout=csum=all;

run;

datab;

mergebc;

sumall+all;

run;

dataa(keep=&yweights_&x);

setb;

weights_&x=100*sum/sumall;

dataweights_&y;

mergeweights_&ya;

by&y;

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;

procexportdata=weights_&y

outfile="d:

\基于sas系统的金融计

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1