I am running some code that contains the following lines of code. It keeps running and running without stopping. Can someone help me to figure out why?
do while K<=Ku;
/* implied VAR(1) estimates */
b_lr = b_r*(1-(rho^K)*(phi^K))/(1-rho*phi);
b_ld = b_d*(1-(rho^K)*(phi^K))/(1-rho*phi);
b_ldp = (rho^K)*(phi^K);
ident = b_lr-b_ld+b_ldp;
aux1 = -K*b_r*(rho^K)*(phi^(K-1))*(1-rho*phi)+rho*b_r*(1-(rho^K)*(phi^K));
aux2 = -K*b_d*(rho^K)*(phi^(K-1))*(1-rho*phi)+rho*b_d*(1-(rho^K)*(phi^K));
aux3 = (1-rho*phi)^2;
aux_br = aux1/aux3;
aux_bd = aux2/aux3;
jacob = ((1-(rho^K)*(phi^K))/(1-rho*phi))~0~aux_br|0~((1-(rho^K)*(phi^K))/(1-rho*phi))~aux_bd|0~0~K*(rho^K)*(phi^(K-1));
varcov = jacob*avcovb*jacob';
tstat1 = (b_lr|b_ld|b_ldp)./sqrt(diag(varcov));
tstat2 = ((b_lr-1)|(b_ld+1)|(b_ldp-1))./sqrt(diag(varcov));
b_lrk[K,1] = b_lr;
b_ldk[K,1] = b_ld;
b_ldpk[K,1] = b_ldp;
identk[K,1] = ident;
t_lrk1[K,1] = tstat1[1,1];
t_ldk1[K,1] = tstat1[2,1];
t_ldpk1[K,1] = tstat1[3,1];
t_lrk2[K,1] = tstat2[1,1];
t_ldk2[K,1] = tstat2[2,1];
t_ldpk2[K,1] = tstat2[3,1];
Endo;
1 Answer
0
The loop in your questions starts out with:
do while K <= Ku;
this means that the loop will keep running until K is greater than Ku. The problem is that neither K, nor Ku change value during the loop. So if K starts the loop with a value less than Ku, it will forever have a value less than Ku. The code inside the loops needs a line to increment K. If you want to iterate over each integer from K to Ku + 1, then you should add the line:
K = K + 1;
just before the endo statement. Alternatively, if you changed the do while statement to a for loop, you would not have to add the K = K + 1 line. As an example, the loops below are equivalent:
k = 1;
ku = 20;
do while k <= ku;
print k;
k = k + 1;
endo;
k = 1;
ku = 20;
for k(1, ku, 1);
print k;
endfor;
Your Answer
1 Answer
The loop in your questions starts out with:
do while K <= Ku;
this means that the loop will keep running until K is greater than Ku. The problem is that neither K, nor Ku change value during the loop. So if K starts the loop with a value less than Ku, it will forever have a value less than Ku. The code inside the loops needs a line to increment K. If you want to iterate over each integer from K to Ku + 1, then you should add the line:
K = K + 1;
just before the endo statement. Alternatively, if you changed the do while statement to a for loop, you would not have to add the K = K + 1 line. As an example, the loops below are equivalent:
k = 1;
ku = 20;
do while k <= ku;
print k;
k = k + 1;
endo;
k = 1;
ku = 20;
for k(1, ku, 1);
print k;
endfor;
