全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1709 1
2013-11-14
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
应该对以上程序进行怎样的改动,才能使程序运行成功呢?请高手指导一下,工作需要,重谢!!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-11-21 16:38:48
一个EXCEL能搞定的问题,搞的这么复杂。。。。。。。。挺厉害的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群