8# funwin
proc sort data=test(where=(^missing(to))) out=old; by yyyymm to; run;
data new;
set old; by yyyymm to;
if first.yyyymm then n=0;
n+1;
run;
proc sort data=new; by yyyymm descending n; run;
data new1;
set new; by yyyymm;
retain m;
if first.yyyymm then m=n/5;
run;
proc sort; by yyyymm n; run;
data new2;
set new1;
do i=1 to 5;
if (i-1)*m<n then if n<=i*m then do;
portfolio=i;
return;
end;
end;
run;
proc means n mean;
class yyyymm portfolio;
var to mv rirf;
run;
*我的代码里,哪个组多和少依据具体数字,但是差别(在to这一组中)不大于1;
结果类似于:
The MEANS Procedure
yyyymm portfolio N Obs Variable Label N Mean
-----------------------------------------------------------------------------------
199301 1 26 to to 26 0.0047284
mv mv 26 149.3469231
rirf rirf 26 0.1092223
2 26 to to 26 0.0236519
mv mv 25 289.4752000
rirf rirf 26 0.1094165
3 27 to to 27 0.0387948
mv mv 27 457.9077778
rirf rirf 27 0.0621011
4 26 to to 26 0.0601412
mv mv 26 489.8403846
rirf rirf 26 0.0887881
5 27 to to 27 0.1832554
mv mv 27 1116.44
rirf rirf 27 0.0729516
199302 1 26 to to 26 0.0048998
mv mv 26 149.5103846
rirf rirf 26 0.1379030
2 27 to to 27 0.0244961
mv mv 26 443.5315385
rirf rirf 27 0.0245299
3 26 to to 26 0.0411493
mv mv 26 308.8773077
rirf rirf 26 0.0362451
4 27 to to 27 0.0609519
mv mv 27 984.0548148
rirf rirf 27 0.0229519
5 27 to to 27 0.1863149
mv mv 27 670.3185185
-----------------------------------------------------------------------------------