Define macro-variable depending on parameter value

I am running second order approximation and letting dynare to calculate unconditional utility. I’m using CRRA utility, specifying utility function depends on whether risk aversion parameter equals 1 or not. I’m trying to write the following code:


parameters rho
rho=1;
@#define logutility=rho

model;
@#if logutility
U=log(exp©-exp((1+epsilon)h)/(1+epsilon))+betaU(+1);
@#else
U=(exp©-exp((1+epsilon)h)/(1+epsilon))^(1-rho)/(1-rho)+betaU(+1);
@#endif
end;

However, Dynare returns msg “unknown variable rho”. To my understanding, I cannot specify “@#define logutility=rho” because rho is a parameter, not a macro-variable, so it cannot show up within “@#define”.

I wonder if there is a way to circumvent this problem?

Try the following

[code]parameters rho_par;

@#define rho=1

rho_par=rho;

model;
@#if rho==1
U=log(exp©-exp((1+epsilon)h)/(1+epsilon))+betaU(+1);
@#else
U=(exp©-exp((1+epsilon)h)/(1+epsilon))^(1-
rho_par)/(1-
rho_par)+beta
U(+1);
@#endif
end;[/code]

You directly set rho for the preprocessor in the second line. From there, the value is assigned to the parameter rho_par, which you can then access.

This follows the example in agtrend.mod.