SAS中文论坛
标题:
救助关于灰色模型的代码问题!
[打印本页]
作者:
shiyiming
时间:
2009-4-25 20:30
标题:
救助关于灰色模型的代码问题!
是关于灰色预测模型GM(1,1)的程序,但是运行的时候出现如下错误:
33 DATA a5;
34 MERGE a1 a3 a4; BY index;
35 IF _N_ = 1 THEN xp = xt; /* x(0)(1) = x(0)(1) */
36 ELSE DO
37 yt1=(xt0-u/a)*EXP(-a*(t-1))+u/a; /* 计算^x(1)(k) =[x(0)(k)-u/a]e-a(k-1)+u/a */
[color=#FF0000:18t9obf5]ERROR: 名称 yt1 不是有效的 SAS 名称[/color:18t9obf5]。
38 yt0=(xt0-u/a)*EXP(-a*(t-2))+u/a; /* 计算^x(1)(k-1) = [x(0)(k)-u/a]e-a(k-2)+u/a */
[color=#FF0000:18t9obf5]ERROR: 名称 yt0 不是有效的 SAS 名称。[/color:18t9obf5]
39 xp=yt1-yt0; /* 计算预测值^x(0)(k) = [x(1)(k)]-x(1)(k-1)*/
[color=#FF0000:18t9obf5]ERROR: 名称 xp 不是有效的 SAS 名称。[/color:18t9obf5]
40 END;
我试着改过名称,但是还是出现同样的问题,请教一下大家这个是出了什么问题?如何修改?
如下是完整的程序
data a1; /* 建立原始数据集a1 */
input t year xt; /* 读入原始数据序 */
yt+xt; /* 生成一阶累加序列 */
index=1; zt=-(yt+lag(yt))/2; /* 为数据矩阵B准备数据 */
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
;
PROC IML; /* 调用IML 模块 */
USE a1; /* 打开已有的SAS数据集a1 */
READ ALL VAR{zt index} INTO B WHERE(zt^=.); /* 将a1中变量zt和index值(不含第读入矩阵B */
READ ALL VAR{xt} INTO Yn WHERE(zt^=.); /* 将a1中变量xt矩阵Yn */
ahat = INV(B`* B)* B`*Yn; /* 计算参数矩阵^a=[a,u]T=[B'B]**-1B'Yn */
ahatt = ahat`;na = {a u}; /* 将参数矩阵转置 */
CREATE a2 FROM ahatt[COLNAME=na]; /* 用转置后的参数矩阵数据建立SAS数据集a2 */
APPEND FROM ahatt; /* 将数据读入到数据集 */
QUIT; /* 退出IML模块 */
DATA a3;
SET a2;index = 1;
DATA a4;
SET a1; IF _N_ = 1;xt0 = xt ;
KEEP xt0 index;
DATA a5;
MERGE a1 a3 a4; BY index;
IF _N_ = 1 THEN xp = xt; /* x(0)(1) = x(0)(1) */
ELSE DO
yt1=(xt0-u/a)*EXP(-a*(t-1))+u/a; /* 计算x(1)(k) =[x(0)(k)-u/a]e**(-a(k-1))+u/a */
yt0=(xt0-u/a)*EXP(-a*(t-2))+u/a; /* 计算x(1)(k-1) = [x(0)(k)-u/a]e**(-a(k-2))+u/a */
xp=yt1-yt0; /* 计算预测值x(0)(k) = [x(1)(k)]-x(1)(k-1)*/
END;
error = xp - xt; /* 计算绝对误差 */
rerror = error/xt*100; /*计算相对误差*/
DROP yt index zt yt1 yt0 xt0;
PROC PRINT DATA = a5; /* 输出计算结果 */
RUN; /* 运行上述程序* /
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2