SAS 程序:
DATA a1;
INPUT t year xt@@;
yt+xt;
index=1;
jbi=lag(xt)/xt;
zt=-(yt+LAG(yt))/2;
DATALINES;
1 1990 24395 2 1991 25286
3 1992 26901 4 1993 27339
5 1994 27871 6 1995 28721
7 1996 29728 8 1997 30067
9 1998 30791 10 1999 31284
11 2000 33716 12 2001 34558
;;
data pan;
set a1;
if 0.1353< =jbi< =7.389 then good=1;
else good=.;
title 'panduanmoxing';
proc print data=pan;
PROC IML;
USE a1;
READ ALL VAR{zt index} INTO B WHERE(zt^=.);
READ ALL VAR{xt} INTO Yn WHERE(zt^=.);
ahat=INV(B`*B)*B`*Yn;
ahatt=ahat`;
na={a u};
CREATE a2 FROM ahatt[COLNAME=na];
APPEND FROM ahatt;
QUIT;
DATA a3;
SET a2;
index=1;
run;
DATA a4;
SET a1;
IF _N_ =1;
xt0=xt;
KEEP xt0 index;
run;
DATA a5;
MERGE a1 a3 a4;
BY index;
IF _N_=1 THEN xp=xt;
ELSE DO
yt1=(xt0-u/a)*EXP(-a*(t-1))+u/a;
yt0=(xt0-u/a)*EXP(-a*(t-2))+u/a;
xp=ytl-yt0;
END;
error=xp-xt;
rerror=error/xt*100;
PROC PRINT DATA=a5;
RUN;
proc means data=a5 std mean noprint;
var xt error;
output out=a5_2 std=sl s2 mean=x_e_;
data a5_3;
set a5_2;
c=s2/sl;
if 0.65 < c then jdu=0;
else if 0.5<c< =0.65 then jdu=3;
else if 0.35<c<0.5 then jdu=2;
else jdu=1;
title 'houyanchabi';
proc print data=a5_3;run;
data a6;
input t year @@;
datalines;
14 2006 15 2007 16 2008 17 2009 18 2010
;
data a7;
merge a3 a4;
array t(6)(12 13 14 15 16 17);
do i=2 to 6;
x1k1=(xt0-u/a)* exp(-a*t(i))+u/a;
x1k0=(xt0-u/a)* exp(-a*t(i-1))+u/a;
xp=x1k1-x1k0;
output;
end;
data a8;
merge a6 a7;
title 'yuce';
proc print data=a8;
run;
以上程序可以调试成功,输出结果也很好,现在我有一组数据急需做一个灰色预测分析,数据是:
序号 年份 销量
1 2009 63.62
2 2010 79.87
3 2011 115.13
4 2012 130.54
5 2013 143.00
应该对以上程序进行怎样的改动,才能使程序运行成功呢?请高手指导一下,工作需要,重谢!!!