给你个例子
有如下的表格
data have;
input id $ num;
datalines;
a 1
a 2
a 4
a 3
b 2
b 3
b 9
;
run;
每个id的数据都是按日期排好序的,为方便就不列日期了。我要得到的是每个id,自初始第一个观测开始至当前观测的平均值和标准差,即得到如下的结果:
id num mean std
a 1 1 #DIV/0!
a 2 1.5 0.707106781
a 4 2.333333333 1.527525232
a 3 2.5 1.290994449
b 2 2 #DIV/0!
b 3 2.5 0.707106781
b 9 4.666666667 3.785938897
关于标准差计算可使用
data have;
input id $ num;
datalines;
a 1
a 2
a 4
a 3
b 2
b 3
b 9
;
data have(drop=num2 sum1 sum2 pre);
set have;
num2=num*num;
retain sum1 sum2 pre 0 ;
if (lag(id)^=id) then do;
sum1=0;
sum2=0;
pre=_n_-1;
end;
sum1=sum1+num;
sum2=sum2+num2;
if (lag(id)^=id) then mean=sum1;
else mean=sum1/(_n_-pre);
if ((lag(id)=id) & (_n_>1)) then do;
std=sqrt((sum2-sum1*sum1/(_n_-pre))/(_n_-pre-1));
end;
run;