全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2627 0
2015-03-30
验证动量效应,通过对2012年2月80支股票收益率进行排序,收益率从小到大分成10组,收益率最小的8只股票的组合为loser,最大的8只股票为winner,计算每月winner和loser组合收益率。现在means数据集中已得2012年3月winner和loser组合收益率,希望输出3月winner和loser收益率(即means数据集中最后一行及第一行数据),以及winner-loser组合收益率差值(即最后一行减第一行)。不知道该如何通过first.var和last.var,以及last.var-first.var输出想要的结果。


源数据txt文件见附件,代码如下:


libname home "C:\Users\SONY\Desktop\sas\vk30igy3\data\";

DATA TRD_Mnth (Label="月个股回报率文件");
Infile 'C:\Users\SONY\Desktop\sas\vk30igy3\data\TRD_Mnth.txt' encoding="utf-8" delimiter = '09'x Missover Dsd lrecl=32767 firstobs=2;
Format Stkcd $6.;
Format Trdmnt $10.;
Format Mretwd 10.6;
Informat Stkcd $6.;
Informat Trdmnt $10.;
Informat Mretwd 10.6;
Label Stkcd="证券代码";
Label Trdmnt="交易月份";
Label Mretwd="考虑现金红利再投资的月个股回报率";
Input Stkcd $ Trdmnt $ Mretwd ;
Run;

data home.trd_mnth;
        set trd_mnth;
run;

data t1;
        set home.trd_mnth;
        year=substr(Trdmnt,1,4)*1;/*乘1是为了将字符型转换成数值型*/
        month=substr(Trdmnt,6,2)*1;
        ymonth=year*100+month;
run;

proc sort data=t1(where=(ymonth=201202)) out=t2; by descending Mretwd; run;

/*分成10组*/
proc rank data=t2 out=t3 groups=10;
        ranks portfolio;
        var Mretwd;
run;

data t3;
        set t3;
        portfolio=portfolio+1;
run;

/*将分组数据合并到原始数据中*/
proc sql;
        create table t4 as
        select a.stkcd,a.year,a.month,a.ymonth,a.Mretwd,b.portfolio
        from t1 as a left join t3 as b
        on a.stkcd=b.stkcd
        order by b.portfolio,a.ymonth;
quit;

proc sort data=t4(where=(ymonth=201203)); by portfolio ymonth;run;

/*计算每月资产组合的收益*/
proc means data=t4 noprint;
        by portfolio ymonth;
        var Mretwd;
        output out=means mean=;
run;
谢谢大家

附件列表

TRD_Mnth.txt

大小:66.9 KB

 马上下载

源数据文件

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群