SAS中文论坛

标题: 毕业论文中SAS程序问题 [打印本页]

作者: shiyiming    时间: 2008-3-3 23: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 秒


怎么样才能够避免这样的情况呢,遇到这样的情况我该怎么处理呀?
作者: shiyiming    时间: 2008-3-4 00:09
标题: 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;
作者: shiyiming    时间: 2008-3-4 02:04
标题: 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;
作者: shiyiming    时间: 2008-3-4 21:28
标题: 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 交互式矩阵程序设计语言 这个模块




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2