I don't know why i got this error, in my knowledge this is the part of program of seo and shin that i can't modified. please can you help me.
Line 256 in C:\Users\fayrouz\Desktop\prog modifié Fairouz.prg
Nested procedure definition G0155
Line 256 in C:\Users\fayrouz\Desktop\prog modifié Fairouz.prg
Syntax error G0008 : 'proc weight(n,t,de,w,t0)'
Closing: C:\Users\fayrouz\Desktop\prog modifié Fairouz.prg
the line 256 in the program is in bold:
/* input:
de: residuals
w : IV's
*/
proc weight(n,t,de,w,t0); // with given residuals
local v,vbar,i,dei,wi,iv;
5 Answers
0
The error Nested procedure definition G0155
means that there is a procedure inside of a procedure, like this:
// Start of procedure
proc (1) = hypotenuse(a, b);
local c, a2, b2;
// Start of procedure definition INSIDE
// another procedure definition which is an
// illegal 'nested procedure definition'
proc (1) = square(x);
retp(a .^ 2);
endp;
a2 = square(a);
b2 = square(b);
retp(sqrt(a2 + b2));
endp;
Does your code have a nested procedure definition
like this?
0
yes I have in my code a nested procedure:
proc setiv(n,t,y,x,t0,jmy,jmx,jn);
local er,er1,j,k,m,i,zyi,zxi,wi,sr,w,sj,mj;
k = cols(x); // x[.,1]=1
w = {};
for i (1,n,1);
zyi = y[(i-1)*(t)+1:i*(t)]; // (t)x1
zxi = x[(i-1)*(t)+1:i*(t),.]; // (t)xk
wi = {}; // (t-t0+1)xm
er = 0;
er1=0; // scalar
for j (1,t-t0+1,1);
sj = j+t0-jn-3;
mj = 1+ minc(jmy|sj);
wi = wi~zeros(t-t0+1,mj);
sr = er+1; // scalar
er1 = er+ mj; // scalar
er = er1;
wi[j,sr:er1]=1~zyi[maxc(1|sj-jmy+1):sj]';
if k > 1;
mj = (-1+k)*minc(jmx|sj);
wi = wi~zeros(t-t0+1,mj);
er = er1+ mj; // scalar
wi[j,er1+1:er]= vec(zxi[maxc(1|sj-jmx+1):sj,2:k])';
endif;
endfor;
w = w|wi; // (t-t0+1)xm
endfor;
retp(w);
endp;
/* input:
de: residuals
w : IV's
*/
proc weight(n,t,de,w,t0); // with given residuals
local v,vbar,i,dei,wi,iv;
v = 0; // scalar
vbar = 0;
for i (1,n,1);
dei = de[(i-1)*(t-t0+1)+1:i*(t-t0+1),.]; // (t-2)x1
wi = w[(i-1)*(t-t0+1)+1:i*(t-t0+1),.]'dei; // m x 1
v = v + wi*wi'; // mxm
vbar = vbar + wi; // mx1
endfor;
if rank(v/n-(vbar/n)*(vbar/n)') == cols(w);
iv = inv(v/n-(vbar/n)*(vbar/n)'); // mxm
else;
"error 2";
iv = invswp(v/n-(vbar/n)*(vbar/n)');
endif;
retp(iv);
endp;
proc weight1(n,t,w,t0); //analytic
local m,v,i,j,wi,wj,iv;
m = cols(w); // number of moments
v = zeros(m+2,m+2);
for i (1,n,1);
wi = zeros(t-t0+3,m+2);
wi[2:t-t0+2,2:m+1] = w[(i-1)*(t-t0+1)+1:i*(t-t0+1),.];
for j (1,t-t0+2,1);
wj = wi[j,.]'-wi[j+1,.]';
v = v + wj*wj'; // mxm
endfor;
endfor;
v = v[2:(m+1),2:(m+1)];
if rank(v/n) == cols(w);
iv = inv(v/n); // mxm
else;
"error";
iv = invswp(v/n);
endif;
retp(iv);
endp;
// ===========================================================================
proc (1) = lagnmatrix(n,t,x,p);
local k,lx,i;
k = cols(x);
lx = zeros(n*t,k);
for i (1,k,1);
lx[.,i] = vec(lagn(reshape(x[.,i],n,t)',p)); // ntx1
endfor;
retp(lx);
endp;
proc (1) = trimrmatrix(n,t,x,p,q);
local k,y,i;
k = cols(x);
y = zeros(n*(t-p-q),k);
for i (1,k,1);
y[.,i] = vec(trimr(reshape(x[.,i],n,t)',p,q));
endfor;
retp(y);
endp;
// ===========================================================================
//outputs:
//dum1: s.e.; dum2: upper regime estimates and s.e.;
//dum3: long-run parameter estimates and s.e. dum4: Jstat and p-value
proc (4) = printout(n,t,t0,w,dy,q,ththat1,z1,z2,Jhat1,_con);
local dumm1,z,lz,dz,tmp,dehat1,iv,Gb,h,kn,s,ds,i,si,Gr,
sb1,sg1,se1,k2,p,tht2hat,se2,bt1,phi1,p1,bse1,bt2,phi2,p2,bse2,bt,bse;
0
It is possible that I missed it, but I do not see a nested procedure. I see a few procedures, but each of them is defined separately. They all open with the proc
statement and end with the endp
statement.
Do you see the difference between the nested procedure I wrote earlier, where a new proc is started INSIDE another proc, compared to yours where there are just a few separate procs?
Do you have the link from which you downloaded this code?
0
this is the link, the program is named invest03.prg.zip
https://sites.google.com/site/myunghseo/programs
0
I still have the same error and i don't know why? I can understand that is not a nested procedure but how can I fix this ?
Your Answer
5 Answers
The error Nested procedure definition G0155
means that there is a procedure inside of a procedure, like this:
// Start of procedure
proc (1) = hypotenuse(a, b);
local c, a2, b2;
// Start of procedure definition INSIDE
// another procedure definition which is an
// illegal 'nested procedure definition'
proc (1) = square(x);
retp(a .^ 2);
endp;
a2 = square(a);
b2 = square(b);
retp(sqrt(a2 + b2));
endp;
Does your code have a nested procedure definition
like this?
yes I have in my code a nested procedure:
proc setiv(n,t,y,x,t0,jmy,jmx,jn);
local er,er1,j,k,m,i,zyi,zxi,wi,sr,w,sj,mj;
k = cols(x); // x[.,1]=1
w = {};
for i (1,n,1);
zyi = y[(i-1)*(t)+1:i*(t)]; // (t)x1
zxi = x[(i-1)*(t)+1:i*(t),.]; // (t)xk
wi = {}; // (t-t0+1)xm
er = 0;
er1=0; // scalar
for j (1,t-t0+1,1);
sj = j+t0-jn-3;
mj = 1+ minc(jmy|sj);
wi = wi~zeros(t-t0+1,mj);
sr = er+1; // scalar
er1 = er+ mj; // scalar
er = er1;
wi[j,sr:er1]=1~zyi[maxc(1|sj-jmy+1):sj]';
if k > 1;
mj = (-1+k)*minc(jmx|sj);
wi = wi~zeros(t-t0+1,mj);
er = er1+ mj; // scalar
wi[j,er1+1:er]= vec(zxi[maxc(1|sj-jmx+1):sj,2:k])';
endif;
endfor;
w = w|wi; // (t-t0+1)xm
endfor;
retp(w);
endp;
/* input:
de: residuals
w : IV's
*/
proc weight(n,t,de,w,t0); // with given residuals
local v,vbar,i,dei,wi,iv;
v = 0; // scalar
vbar = 0;
for i (1,n,1);
dei = de[(i-1)*(t-t0+1)+1:i*(t-t0+1),.]; // (t-2)x1
wi = w[(i-1)*(t-t0+1)+1:i*(t-t0+1),.]'dei; // m x 1
v = v + wi*wi'; // mxm
vbar = vbar + wi; // mx1
endfor;
if rank(v/n-(vbar/n)*(vbar/n)') == cols(w);
iv = inv(v/n-(vbar/n)*(vbar/n)'); // mxm
else;
"error 2";
iv = invswp(v/n-(vbar/n)*(vbar/n)');
endif;
retp(iv);
endp;
proc weight1(n,t,w,t0); //analytic
local m,v,i,j,wi,wj,iv;
m = cols(w); // number of moments
v = zeros(m+2,m+2);
for i (1,n,1);
wi = zeros(t-t0+3,m+2);
wi[2:t-t0+2,2:m+1] = w[(i-1)*(t-t0+1)+1:i*(t-t0+1),.];
for j (1,t-t0+2,1);
wj = wi[j,.]'-wi[j+1,.]';
v = v + wj*wj'; // mxm
endfor;
endfor;
v = v[2:(m+1),2:(m+1)];
if rank(v/n) == cols(w);
iv = inv(v/n); // mxm
else;
"error";
iv = invswp(v/n);
endif;
retp(iv);
endp;
// ===========================================================================
proc (1) = lagnmatrix(n,t,x,p);
local k,lx,i;
k = cols(x);
lx = zeros(n*t,k);
for i (1,k,1);
lx[.,i] = vec(lagn(reshape(x[.,i],n,t)',p)); // ntx1
endfor;
retp(lx);
endp;
proc (1) = trimrmatrix(n,t,x,p,q);
local k,y,i;
k = cols(x);
y = zeros(n*(t-p-q),k);
for i (1,k,1);
y[.,i] = vec(trimr(reshape(x[.,i],n,t)',p,q));
endfor;
retp(y);
endp;
// ===========================================================================
//outputs:
//dum1: s.e.; dum2: upper regime estimates and s.e.;
//dum3: long-run parameter estimates and s.e. dum4: Jstat and p-value
proc (4) = printout(n,t,t0,w,dy,q,ththat1,z1,z2,Jhat1,_con);
local dumm1,z,lz,dz,tmp,dehat1,iv,Gb,h,kn,s,ds,i,si,Gr,
sb1,sg1,se1,k2,p,tht2hat,se2,bt1,phi1,p1,bse1,bt2,phi2,p2,bse2,bt,bse;
It is possible that I missed it, but I do not see a nested procedure. I see a few procedures, but each of them is defined separately. They all open with the proc
statement and end with the endp
statement.
Do you see the difference between the nested procedure I wrote earlier, where a new proc is started INSIDE another proc, compared to yours where there are just a few separate procs?
Do you have the link from which you downloaded this code?
this is the link, the program is named invest03.prg.zip
https://sites.google.com/site/myunghseo/programs
I still have the same error and i don't know why? I can understand that is not a nested procedure but how can I fix this ?