SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 994|回复: 3
打印 上一主题 下一主题

毕业论文中SAS程序问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-3-3 23:07:07 | 只看该作者

毕业论文中SAS程序问题

各位兄弟姐妹大家好,现在正做毕业论文,有一个棘手的问题想向大家请教。
我在SAS中运行这个程序:

data B2W;
set B2W;
dir=dif(ir);
lagir=lag(ir);
ivir=1/lagir;
if dir=. then delete;
run;

运行完这个程序后出现了下面的结果:
NOTE: 在 行 716 列 7 处检测到 0 为除数。
ir=0.02156 dir=0.02156 lagir=0 ivir=. _ERROR_=1 _N_=176
NOTE: 缺失值的生成是对缺失值执行操作的结果。
       位置: (次数)(行:列)。
      1 在 716:7
NOTE: 下列位置无法执行算术运算。运算结果已设置为缺失值。
       位置: (次数)(行:列)。
      1 在 716:7
NOTE: 从数据集 LS.B2W 读取了 655 个观测。
NOTE: 数据集 LS.B2W 有 654 个观测和 4 个变量。
NOTE: DATA 语句 所用时间(总处理时间):
      实际时间         0.15 秒
      CPU 时间         0.03 秒


怎么样才能够避免这样的情况呢,遇到这样的情况我该怎么处理呀?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-3-4 00:09:26 | 只看该作者

Re: 毕业论文中SAS程序问题

data B2W;
set B2W;
dir=dif(ir);
lagir=lag(ir);
ivir=1/lagir;
if dir=. then delete;
run;



你可以在前边加个判断,看那个除数是不是0,如果不是0,继续做后面的处理,比如下面的程序:
data B2W;
set B2W;
dir=dif(ir);
lagir=lag(ir);
if lagir^=0;
ivir=1/lagir;
if dir=. then delete;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-3-4 02:04:41 | 只看该作者

Re: 毕业论文中SAS程序问题

其实完整的程序是下面这样的,这是朱世武老师《金融计算与建模》中第23章里的程序。其中B2W是7日回购利率两周加权指数平均数,是时间序列数据。我用的数据和朱老师用的时期不一样,但是C2、C3、C4、C5、C6和书上算出来的数差距不大,C1差距非常大,书上是零点几,我算出来是九点几。另一个问题是下面的“f=”这段程序提交后总是说语句错误或顺序不对,可是也没有发现什么错误啊。还看不懂con={0 0 0 0 -5,1 50 1 1 5}; x={0.2 5 0.02 0.2 0.8};这两个语句。请各位高手帮帮忙啊,急切想弄清这个问题!
data Resdat.B2W;
set Resdat.Bchmkir;
where code='B2W';
keep date ir;
run;
data B2W;
set Resdat.B2W;
where '05jan2001'd<=date<='13aug2003'd;
run;
data B2W;
set B2W;
dir=dif(ir);
lagir=lag(ir);
ivir=1/ lagir;
if dir=. then delete;
run;
proc iml;
reset deflib=work;
use B2W;
list;
list all;
read all var {lagir} into ir;
read all var {dir} into dir;
read all var {ivir} into ivir;
print ir dir ivir;
store ir dir ivir;
run;
quit;
/* 23.1.5 CIR模型利率期限结构拟合 */
proc iml;
reset deflib=work;
load ir dir ivir;
[color=#FF0040:25t2m8bd]c1[/color:25t2m8bd]=sum(dir##2#365#ivir);
c2=-2#sum(dir#ivir);  
c3=2*sum(dir);     
c4=sum((1/365)#ivir);  
c5=-2*656/365;  
c6=sum(ir#(1/365));   
print c1 c2 c3 c4 c5 c6;
quit;
proc iml;
reset deflib=work;
start F_BETTS(x);
[color=#FF0040:25t2m8bd]f[/color:25t2m8bd]=-(656/2)*log(x[1]**2)-1/2*(x[1]**(-2))*(0.0352866416+(0.3776176352)*x[2]*x[3]+(-0.008852)*x[2]+(82.768352682)*x[2]*x[2]*x[3]*x[3]+(-3.594520548)*x[2]*x[2]*x[3]+(0.0392739233)*x[2]*x[2])-(4/2)*log(x[4]**2)  /* =  */
-(1/2)*(x[4]**(-2))*((log(0.9465)-log(2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)*exp((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*2.202740/2)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*2.202740)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)))*2*x[2]*x[3]/(x[1]**2)-2*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*2.202740)-1)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*2.202740)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2))*0.021027)**2)
-(1/2)*(x[4]**(-2))*((log(0.9802)-log(2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)*exp((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*0.880837/2)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.880837)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)))*2*x[2]*x[3]/(x[1]**2)-2*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.880837)-1)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.880837)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2))*0.021027)**2)
-(1/2)*(x[4]**(-2))*((log(0.9800)-log(2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)*exp((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*0.88/2)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.88)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)))*2*x[2]*x[3]/(x[1]**2)-2*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.88)-1)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.88)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2))*0.021027)**2)
-(1/2)*(x[4]**(-2))*((log(0.9905)-log(2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)*exp((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*0.405427/2)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.405427)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)))*2*x[2]*x[3]/(x[1]**2)-2*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.405427)-1)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.405427)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2))*0.021027)**2)
-(1/2)*(x[4]**(-2))*((log(0.984)-log(2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)*exp((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*0.681383/2)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.681383)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2)))*2*x[2]*x[3]/(x[1]**2)-2*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.681383)-1)/((x[2]+x[5]+((x[2]+x[5])**2+2*x[1]**2)**(1/2))*(exp(((x[2]+x[5])**2+2*x[1]**2)**(1/2)*0.681383)-1)+2*((x[2]+x[5])**2+2*x[1]**2)**(1/2))*0.021027)**2)
;
return(f);
finish F_BETTS;
con={0 0 0 0 -5,1 50 1 1 5};
x={0.2 5 0.02 0.2 0.8};
optn={1 3};
call nlpnra(rc,xres,"F_BETTS",x,optn,con);
store xres;
quit;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-3-4 21:28:57 | 只看该作者

Re: 毕业论文中SAS程序问题

con={0 0 0 0 -5,1 50 1 1 5}; x={0.2 5 0.02 0.2 0.8};
这个是矩阵的写法,其他的问题你研究下proc iml 交互式矩阵程序设计语言 这个模块
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 14:16 , Processed in 0.082949 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表