先写一下我的一个想法把,可能不是最好的,不过应该能完成要求
首先对数据集按id 降序x排序
proc sort data=a;
by id descending x;
run;
然后产生一个新的数据集,每一个观测包含了测量值x, 与x相近的且小于x的测量值x1, x和x1的差dlt, x和x1的均值avg
data b;
set a;
by id;
retain x1;
if first.id then x1=x;
else do;
dlt=sum(x1-x);
avg=mean(x,x1);
output;
x1=x;
end;
run;
The SAS System
Obs id x x1 dlt avg
1 a1 2.5 2.9 0.4 2.70
2 a1 2.2 2.5 0.3 2.35
3 a2 5.7 5.9 0.2 5.80
4 a2 5.1 5.7 0.6 5.40
5 a2 5.0 5.1 0.1 5.05
最后用proc summary选取dlt最小(即最相近)的avg值
proc summary data=b nway;
class id;
var dlt;
output out=c(drop=_type_ _freq_) minid(dlt(x x1 dlt avg))=;
run;
The SAS System
Obs id x x1 dlt avg
1 a1 2.2 2.5 0.3 2.35
2 a2 5.0 5.1 0.1 5.05