楼主: harlon1976
9696 28

[原创博文] 如何进行系统设置 [推广有奖]

  • 2关注
  • 27粉丝

版主

院士

54%

还不是VIP/贵宾

-

威望
1
论坛币
33781 个
通用积分
135.1232
学术水平
25 点
热心指数
39 点
信用等级
17 点
经验
59249 点
帖子
1928
精华
0
在线时间
4352 小时
注册时间
2005-8-27
最后登录
2025-12-9

楼主
harlon1976 发表于 2011-10-11 18:33:37 |AI写论文
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 来设置。

关键词:ALLOCATION EFFICIENCY statement Location Increase allocation efficiency increase option 如何

沙发
爱萌 发表于 2011-10-12 18:10:28
PROC IML WORKSIZE=10000000 ;
设置一下就可以了
最恨对我说谎或欺骗我的人

藤椅
harlon1976 发表于 2011-10-12 18:19:31
谢谢楼主的帮助,我试试看是否可行。

板凳
harlon1976 发表于 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;

已有 1 人评分经验 收起 理由
crackman + 80 鼓励积极发帖讨论

总评分: 经验 + 80   查看全部评分

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

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

7
harlon1976 发表于 2011-10-14 08:13:10
kuhasu 发表于 2011-10-14 01:32
我这里除了你的代码不全造成的报错死循环,没什么问题。
你好:程序中有几个代码不全,现修改过来如下:
%macro mm(phi,smpl,flag,cs,xzx);
proc iml;
%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;
运行一段时间以后,日志窗口还是出现显示出现上述问题,一会儿日志窗口就写满了,请你再帮我看看,这个程序究竟在哪里出了问题?谢谢!

8
kuhasu 发表于 2011-10-14 14:35:07
WARNING: 已忽略宏定义 MM 的 %MEND 语句中的无关信息。
135  %mm(1,25,8,500,100);
NOTE: IML Ready
ERROR: (execution) Invalid subscript or subscript out of range.

operation : [ at line 135 column 1
operands  : ebs, _TEM1001

ebs      1 row       1 col     (numeric)

0.2831686

_TEM1001      1 row       1 col     (numeric)

         2

statement : ASSIGN at line 135 column 1
ERROR: (execution) Invalid subscript or subscript out of range.

operation : [ at line 135 column 1
operands  : y, *LIT1019, _TEM1001

y      1 row       1 col     (numeric)

0.2831686

*LIT1019      1 row       1 col     (numeric)

         1

_TEM1001      1 row       1 col     (numeric)

        24

statement : ASSIGN at line 135 column 1
ERROR: (execution) Invalid subscript or subscript out of range.

operation : [ at line 135 column 1
operands  : y, *LIT1022, *LIT1023,

y      1 row       1 col     (numeric)

0.2831686

*LIT1022      1 row       1 col     (numeric)

         2

*LIT1023      1 row       1 col     (numeric)

        25

statement : ASSIGN at line 135 column 1
ERROR: (execution) Matrix has not been set to a value.

operation : [ at line 135 column 1
operands  : dy, _TEM1002, _TEM1004,

dy      0 row       0 col     (type ?, size 0)


_TEM1002      1 row       1 col     (numeric)

         8

_TEM1004      1 row       1 col     (numeric)

        23

statement : ASSIGN at line 135 column 1
ERROR: (execution) Matrix has not been set to a value.

operation : [ at line 135 column 1
operands  : dy, _TEM1002, _TEM1004,

dy      0 row       0 col     (type ?, size 0)


_TEM1002      1 row       1 col     (numeric)

         7

_TEM1004      1 row       1 col     (numeric)

        22

statement : ASSIGN at line 135 column 1
ERROR: (execution) Matrix has not been set to a value.

operation : [ at line 135 column 1
operands  : dy, _TEM1002, _TEM1004,

dy      0 row       0 col     (type ?, size 0)


_TEM1002      1 row       1 col     (numeric)

         6

_TEM1004      1 row       1 col     (numeric)

        21

statement : ASSIGN at line 135 column 1
ERROR: (execution) Matrix has not been set to a value.

operation : [ at line 135 column 1
operands  : dy, _TEM1002, _TEM1004,

dy      0 row       0 col     (type ?, size 0)


_TEM1002      1 row       1 col     (numeric)

         5

_TEM1004      1 row       1 col     (numeric)

        20

statement : ASSIGN at line 135 column 1
ERROR: (execution) Matrix has not been set to a value.

operation : [ at line 135 column 1
operands  : dy, _TEM1002, _TEM1004,

dy      0 row       0 col     (type ?, size 0)


_TEM1002      1 row       1 col     (numeric)

         4

_TEM1004      1 row       1 col     (numeric)

        19

statement : ASSIGN at line 135 column 1
ERROR: (execution) Matrix has not been set to a value.

9
爱萌 发表于 2011-10-14 21:48:58
都是错误的,搞什么
最恨对我说谎或欺骗我的人

10
爱萌 发表于 2011-10-14 21:51:03
怎么可能不上错误出来在log里面
最恨对我说谎或欺骗我的人

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 16:01