是不是这个意思:
data test;
do value=.,566,.,.,.,.,.,.,.,.,998,.,.,.,1200,.;
origvalue=value;
output;
end;
run;
data test1;
obs=_n_;
set test;
retain tmp num;
flag=missing(value);
*** Previous non-missing;
if flag=0 then do;
tmp=value;
num=0;
end;
else if flag=1 then do;
num+1;
value=tmp;
end;
run;
proc sort data=test1;
by descending obs;
run;
data test2;
set test1;
by descending obs;
retain tmp1 num1 num2;
*** Next non-missing;
if flag=0 then do;
tmp1=value;
num1=0;
end;
else if flag=1 then do;
if num1=0 then num2=int(num/2);
num1+1;
if num1 <= num2 and ^missing(tmp1) then value=tmp1;
if missing(value) then value=tmp1;
end;
keep obs origvalue value;
run;
proc sort data=test2;
by obs;
run;
|