全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
9593 28
2011-10-11
悬赏 1000 个论坛币 未解决
我的程序在IML中运行,由于是多重循环,一开始运行出现提示语:
Initial allocation of symbol space exhausted. You may specify SYMSIZE= option on PROC IML statement to increase its
     allocation for more efficiency.(蓝色字体)
运行一段时间后就出现了以下红色字体:
无法确定 LINE 和 COLUMN。
NOTE: NOSPOOL 已打开。用 OPTION SPOOL 重新运行可恢复出错的 LINE 和 COLUMN。
请问如何使用SYMSIZE= option 来设置。
二维码

扫码加我 拉你入群

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

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

全部回复
2011-10-12 18:10:28
PROC IML WORKSIZE=10000000 ;
设置一下就可以了
二维码

扫码加我 拉你入群

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

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

2011-10-12 18:19:31
谢谢楼主的帮助,我试试看是否可行。
二维码

扫码加我 拉你入群

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

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

2011-10-12 21:54:34
爱萌 发表于 2011-10-12 18:10
PROC IML WORKSIZE=10000000 ;
设置一下就可以了
我实验了一下,但一段时间以后又弹出对话框说磁盘已满,而日志窗口显示如下的文字:
NOTE: Initial allocation of symbol space exhausted. You may specify SYMSIZE= option on PROC IML statement to increase its
      allocation for more efficiency.
NOTE: 内部的源假脱机文件已被截断。行和列信息的错误日志记录在下一步边界之前可能不完整。
NOTE: 内部的源假脱机文件已被截断。行和列信息的错误日志记录在下一步边界之前可能不完整。
YHQSRC/XZPWRIT failure

请斑竹再赐教究竟是怎么回事!为方便你的了解问题,我把程序贴出来,供你参考:
%macro mm(phi,smpl,flag,cs,xzx);
proc iml worksize=1000000;
%let n=&smpl-1;pva1=j(&xzx,1,0);pva2=j(&xzx,1,0);
%do  jj=1 %to &xzx;
y=j(&smpl,1,0);
ebs=normal(j(&smpl,1,0));
do i=2 to &smpl;
ebs=0.6*ebs[i-1]+normal(0);
y=y[i-1]+ebs;
end;
ly=y[1:&n];
dy=y[2:&smpl,]-ly;


%do k=1 %to &flag;
dy&k=dy[&flag+1-&k:&n-&k,];
%end;
y1=dy1;
%do j=2 %to &flag;
x=y1||dy&j;
y1=x;
%end;

xs=ly[&flag+1:&n]||x;
bpho=inv(xs`*xs)*xs`*dy[&flag+1:&n];
tpho=&smpl*bpho[1]/(1-sum(bpho[2:&flag+1]));
res=dy[&flag+1:&n]-xs*bpho;

nobs=nrow(xs);
nva=ncol(xs);
sig=sum(res##2)/(nobs-nva);
var=inv(xs`*xs)*sig;
tstat=bpho[1]/sqrt(var[1,1]);
jz=j(&cs,2,0);
jz[,1]=tpho;
jz[,2]=tstat;

hy=dy[&flag+1:&n,];
beta1=inv(x`*x)*x`*hy;
ebsre=hy-x*beta1;
juzhi=sum(ebsre)/(&n-&flag);
e1=j(&n-&flag,1,1);
ebsstar=ebsre-juzhi*e1;

jzb=j(&cs,2,0);
%do xh=1 %to &cs;
ebsb=j(&smpl,1,0);
do kl=1 to &smpl;
obs=int(uniform(0)*(&n-&flag)+1);
ebsb[kl,1]=ebsstar[obs,1];end;
%do il=1 %to &flag;
b&il=j(&flag,1,0);
%do w=1 %to &flag;
%let jg=%eval(&w-&il);
if &jg<=0 then b&il[&w,]=0;
if &jg>0 then  b&il[&w,]=beta1[&jg,];
%end;
%end;
sb=b1;

%do l=2 %to &flag;
b=sb||b&l;
sb=b;
%end;
id=i(&flag);
zb=j(&smpl,1,0);
zb[1:&flag,]=inv(id-sb)*ebsb[1:&flag,];
call symput("newob",char(&flag+1));
%do hh=&newob %to &smpl;
do r=1 to &flag;
zb[&hh,]=zb[&hh,]+beta1[r,]*zb[&hh-r,];
end;
zb[&hh,]=zb[&hh,]+ebsb[&hh,];
%end;
yb=j(&smpl,1,0);
yb[1,]=zb[1,];
do h=2 to &smpl;
yb[h,1]=yb[h-1,]+zb[h,];
end;

lyb=yb[1:&n];
dyb=yb[2:&smpl,]-lyb;
%do g=1 %to &flag;
dyb&g=dyb[&flag+1-&g:&n-&g,];
%end;
yb1=dyb1;
%do jk=2 %to &flag;
xb=yb1||dyb&jk;
yb1=xb;
%end;
xsb=lyb[&flag+1:&n]||xb;
bphob=inv(xsb`*xsb)*xsb`*dyb[&flag+1:&n];
tphob=&smpl*bphob[1]/(1-sum(bphob[2:&flag+1]));
resb=dyb[&flag+1:&n]-xsb*bphob;
sigb=sum(resb##2)/(nobs-nva);

varb=inv(xsb`*xsb)*sigb;
tstatb=bphob[1]/sqrt(varb[1,1]);
jzb[&xh,1]=tphob;
jzb[&xh,2]=tstatb;
%end;
bj=jzb<=jz;
pt=sum(bj[,1])/&cs;
pstat=sum(bj[,2])/&cs;
p1=pt<=0.05;
p2=pstat<=0.05;
pva1[&jj]=p1;pva2[&jj]=p2;
free/n pva1 pva2;
%end;
pv1=sum(pva1)/&xzx;
pv2=sum(pva2)/&xzx;
print  pv1 pv2;
%mend mm(phi,smpl,lag,cs,xzx);
%mm(1,25,8,500,100);
run;

二维码

扫码加我 拉你入群

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

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

2011-10-13 21:33:44
难道没有高手能够解决这儿问题吗?甚是郁闷啊!这个程序也很普通啊,但为什么会使电脑的系统盘用满,问题究竟出在哪里呢!
二维码

扫码加我 拉你入群

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

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

2011-10-14 01:32:20
我这里除了你的代码不全造成的报错死循环,没什么问题。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群