Page 1 of 1

IF ELSE block

Posted: Thu Apr 26, 2018 6:56 pm
by timduy
I am trying to work with this code:


Code: Select all

ALL 200
*
COMPUTE ALPHA = 0.1
COMPUTE BETAPI = 1.75
COMPUTE GAMMA = 0.3
COMPUTE RSTAR = 2.0

COMPUTE THETA = (1/(1+ALPHA*GAMMA*(BETAPI-1)))

COMPUTE PISTAR  = 2.0
SET EXPECTEDPI = 2.0

SET PIZLB 1 200 = ((BETAPI-1)/BETAPI)*PISTAR-(RSTAR/BETAPI)

SET YSTAR = LOG(16374.2)

COMPUTE PISHOCK = 0.0
COMPUTE YSHOCK = 0.0

SET EPSILONPI 1 200 = 0.0
SET EPSILONY 1 200 = 0.0

SET EPSILONPI 2 2 = PISHOCK
SET EPSILONY 2 2 = YSHOCK



SET PI 1 1 = THETA*EXPECTEDPI + (1-THETA)*PISTAR +THETA*(GAMMA*EPSILONY+EPSILONPI)


IF YSHOCK=0.0
   SET PI 2 2 = THETA*PI{1} + (1-THETA)*PISTAR +THETA*(EPSILONPI)
ELSE IF YSHOCK<0.0
  SET PI 2 2 = THETA*PI{1} + (1-THETA)*PISTAR -THETA*(GAMMA*EXP(-EPSILONY)+EPSILONPI)
ELSE
   SET PI 2 2 = THETA*PI{1} + (1-THETA)*PISTAR +THETA*(GAMMA*EXP(EPSILONY)+EPSILONPI)

DO ITER1 = 3, 200
   IF PI(ITER1)<PIZLB(ITER1)
      SET PI ITER1 ITER1 = (1/(1-ALPHA*GAMMA))*PI{1}+((ALPHA*GAMMA)/(1-ALPHA*GAMMA))*RSTAR
   ELSE
      SET PI ITER1 ITER1 = THETA*PI{1} + (1-THETA)*PISTAR +THETA*(GAMMA*EPSILONY+EPSILONPI)
END DO ITER1

*SET PI 3 200 = THETA*PI{1} + (1-THETA)*PISTAR +THETA*(GAMMA*EPSILONY+EPSILONPI)

SET Y 1 1 = EXP(YSTAR - THETA*ALPHA*(BETAPI-1)*(EXPECTEDPI-PISTAR+EPSILONPI)+(1-THETA*ALPHA*GAMMA*(BETAPI-1))*EPSILONY)

DO ITER = 2, 200
   IF PI(ITER)<PIZLB(ITER)
      SET Y ITER ITER = EXP(YSTAR + ALPHA*RSTAR + ALPHA*PI + EPSILONY)
   ELSE
      SET Y ITER ITER = EXP(YSTAR - THETA*ALPHA*(BETAPI-1)*(PI{1}-PISTAR+EPSILONPI)+(1-THETA*ALPHA*GAMMA*(BETAPI-1))*EPSILONY)
END DO ITER


SET INT = RSTAR + PISTAR + BETAPI*(PI-PISTAR)
SET REAL = INT - PI
*

SPGRAPH(HFIELDS=2,VFIELDS=2)
   GRAPH(HEADER="Y") 1
   #Y
   GRAPH(HEADER="PI") 1
   #PI
   GRAPH(HEADER="RATES", KEY=UPRIGHT) 2
   #INT
   #REAL
   SCATTER(STYLE=SYMBOLS,OVERLAY=LINE, OVSAME, OVCOUNT=1) 2
   #Y PI
   #Y PI
SPGRAPH(DONE)
But this block:

Code: Select all

IF YSHOCK=0.0
   SET PI 2 2 = THETA*PI{1} + (1-THETA)*PISTAR +THETA*(EPSILONPI)
ELSE IF YSHOCK<0.0
  SET PI 2 2 = THETA*PI{1} + (1-THETA)*PISTAR -THETA*(GAMMA*EXP(-EPSILONY)+EPSILONPI)
ELSE
   SET PI 2 2 = THETA*PI{1} + (1-THETA)*PISTAR +THETA*(GAMMA*EXP(EPSILONY)+EPSILONPI)
is locking up the program and I can't figure out why. Any help appreciated.

Re: IF ELSE block

Posted: Thu Apr 26, 2018 10:18 pm
by TomDoan
1. You want if yshock==0.0 not yshock=0 (which makes yshock equal to zero).

2. When the IF-ELSE block is outside of another loop or procedure, you need to terminate it with an extra END. See the
"If the IF is the first..." sentence on https://estima.com/ratshelp/ifinstruction.html