|
如果每个id的VALUE均为三个,楼主可以试试以下方法:
proc datasets lib=work memtype=data nolist kill;
quit;
data finace;
input id date yymmdd10. value;
cards;
1 2013/01/01 -200
1 2013/02/14 50
1 2013/04/15 120
2 2013/02/02 -50
2 2013/03/04 20
2 2013/04/01 25
run;
proc sort data=finance;
by id;
run;
data finace1;
set finace;
by id;
if first.id then ord=0;
ord+1;
run;
proc sort data=finace1;
by id ord;
run;
%macro finace(dout=, var=, name= );
proc transpose data=finace1 out=&dout.(drop=_name_) prefix=&name.;
id ord;
by id;
var &var.;
run;
proc sort data=&dout.;
by id;
run;
%mend;
%finace(dout=finace2, var=value, name=v);
%finace(dout=finace3, var=date, name=d);
data fin;
merge finace2 finace3;
by id;
run;
data rate(keep=id rate);
set fin;
rate = finance('xirr', v1, v2, v3, d1, d2, d3, 0.1);
run;
|