LZ的问题比较复杂,不太可能一步到位。要一步一步来。 首先要生成一个小一点的数据处理集,用于测试程序. 而且每一步有不同的问题和解决方法。 比如:
第一步,中return variable 的缺矢值如何处理?
第二步,每一个月的等权重加权收益 如何计算?
第三步,每一个月的赢家组合收益序列和输家组合收益序列, 由不同的股票构成,如何处理? 两者之差是什么意思? 怎么计算?
下面的code只是做ranking.
data mdata1; /* creat year and month variable, fill missing value for retrun */
set mdata; /* imported from excel file */
retain lag_return;
lag_return=lag(return);
year= input(substr(trdmnt, 1,4), 4.);
month = input(substr(trdmnt, 6,2), 2.);
if missing(return) then return=lag_return; /* missing might be filled */
drop lag_return; /* using other methods */
run;
proc sort data=mdata1 out=mdata_sort; /* sort the data by year, month, and return */
by year month descending return;
run;
proc rank data=mdata_sort out=mdata_rank group=100;
var return;
ranks return_rank; /* define a ranking variable */
by year month;
run;
data mdata_rank1;
length rank $6.;
set mdata_rank;
if return_rank < 30 then rank= 'Low ';
if return_rank > 69 then rank= 'High ';
if return_rank >= 30 and return_rank <=69 then rank = 'Middle';
run;
proc sort data=mdata_rank1 out=mdata_rank_sort; /* the sorting may not be required */
by year month descending return;
run;
data mdata_high mdata_middle mdata_low;
set mdata_rank_sort;
if rank = 'High' then output mdata_high;
if rank = 'Low' then output mdata_low;
if rank = 'Middle' then output mdata_middle;
run;