datafile="d:\xt49.xls"
dbms=excel2000 replace;
getnames=yes; /*首行为变量名*/
run;
proc print data=xt49;
run;
proc reg data=xt49;
model y=x/clb p r;/*其中clb是给出回归系数的区间估计*/
output out=out r=residual;/*把回归的结果输出在文件out里,残差给变量名residual */
run;
proc print data=out;
run;
proc plot data=out;
plot residual*x;/*做残差图,检验是否存在异方差*/
run;
/*下面利用残差的绝对值和X间的 spearman的相关系数检验异方差*/
data out1 ;
set out; /*调用数据集out*/
z=abs(residual); /*求残差的绝对值*/
run;
proc print data=out1 ;
run;
proc corr data=out1 outs=out2; /*corr指做相关分析 outs=out2表示将等级相关检验的结果输出到out2*/
var x z;
run;
这之前的都没问题,但下面用宏进行最小二乘估计就出错,请高手指教!
/*下面用自变量的幂函数进行加权最小二乘估计*/
title"wls method";
data w1;/*建立新的数据集w1,以便计算权重*/
set out1;
keep y x;
run;
data w2;/*建立新的数据集w,以保留权重*/
set w1;
array row{10} w1-w10;/* w1-w10为不同m时的权数值*/
array p{10}(-2,-1.5,-1,-0.5,0.5,1,1.5,2.5,3);
do i=1 to 10;
row(i)=1/x**p{i};
end;
run;
proc print data=w2;
run;
%macro WLS(putdata);/*WLS宏,putdata为待分析数据*/
%do j=1 %to 10;
%analyze(&putdata,&j);
%Drawplot(&putdata,&j);
%end;
%mend;
%macro analyze(indata,count);/*回归过程宏,indata为待
分析数据,count为计数值*/
proc reg data=&indata;
model y=x/r;
weight w&count;
output out=w2 r=resid&count;
%mend;
%macro drawplot(indata,count);/*绘制残差图宏,indata为
待分析数据,count为计数值*/
Title "WLS Method weight=w&count";
proc gplot data=&indata;
plot resid&count*x;
%mend;
%Wls(w2);
出错如下
proc reg data=&indata; model y=x/r; weight w&count; output out=w2 r=resid&count;
--
180
ERROR 180-322: Statement is not valid or it is used out of proper order.



雷达卡




京公网安备 11010802022788号







