data have1;
set have;
by a;
lag1 = lag(c);
lag2 = lag2(c);
if first.a then do;
flag=.;
n=1;
end;
else n+1;
if c = lag1+lag2 then flag=1;
drop lag1 lag2;
run;
data want;
set have1;
if flag=1 and n not in(1 2) then delete;
drop flag n;
run;
/*********计算每只股票每年的价值D的总和,(总和变量名还用D)*************/
proc means data=ori_data noprint;
by A E;
output out=sumdata sum=;
run;
/*****在原数据集的基础上,加上总和D/2.******/
data mergedata;
merge ori_data(in=bb ) sumdata(in=aa rename=(d=d1)) ;
by A E;
if aa and bb;
d2=d1/2;
drop d1;
run;
/*****得到结果******/
data merge2;
retain A E B C D;
set mergedata;
if d2~=d or _freq_=1;
keep A E B C D;
run;
data have1;
set have;
by a;
lag1 = lag(D);
lag2 = lag2(D);
if first.a then do;
flag=.;
n=1;
end;
else n+1;
if D = lag1+lag2 then flag=1;
drop lag1 lag2;
run;
proc sort data=have1 out=have2; by a descending n; run;
data have3;
set have2;
by a;
lag1 = lag(D);
lag2 = lag2(D);
if first.a then do;
flag1=.;
n1=1;
end;
else n1+1;
if D = lag1+lag2 then flag1=1;
drop lag1 lag2;
run;
proc sort data=have3; by a n; run;
data want;
set have3;
if flag = 1 and n not in(1 2) then delete;
if flag1 = 1 and n1 not in(1 2) then delete;
drop flag n flag1 n1;
run;