crackman 发表于 2010-10-22 17:46 
转自博客:
http://hi.baidu.com/crack_man/blog
data crackman;
input x@@;
datalines;
1 2 6 8 0 5 2 3 5 6 9 10
;
run;
/*用MEANS求均值和标准差*/
proc means data=crackman;
var x;
run;
/*data step里求均值和标准差*/
data crackman;
if _n_=1 then do until(endobs);
set crackman nobs=obs end=endobs;
sum+x;
avg=sum/obs;
end;
if _n_=1 then do until(end);
set crackman end=end;
uss+(x-avg)*(x-avg);
s=sqrt(uss/(obs-1));
end;
put "样本数=" obs "均值=" avg @15 "标准差=" s;
stop;
run;
用DATA STEP计算均值和标准
对于理解均值和标准差异偶很大的好处
Here is an one pass to calculate mean & variance using adptive algorithm.
data tmp;
do j=1 to 1000000;
x=rannor(123);
output;
end;
keep x;
run;
data _null_;
n = 0;
mean = 0;
M2 = 0;
do i=1 to nobs;
set tmp nobs=nobs;
n = n + 1;
delta = x - mean ;
mean = mean + delta/n ;
M2 = M2 + delta*(x - mean) ;
if n >1 then variance = M2/(n-1) ;
end;
put 'Mean=' mean 'Variance=' variance ;
run;
proc means data=tmp mean var;
var x;
run;