Hi, this is a rather simple syntax question, but if solved can save me a lot of time and make my work much less cumbersome.
I have deterministic OLG models and need to define the number of periods for shocks and for simulation in a generic fashion. That is, instead of writing explicitly “periods 1:10” in the shocks block, for example, I would like to be able to write something like “periods 1:T”, where T is a variable predefined by me. The same goes for “simul (periods = T2)”, where T2 would also be a variable predefined by me.
I tried to solve this problem by using the macroprocessor, but to no avail. The farthest I got was to write:
@#define shocks_length = "1:10"
periods @{shocks_length}
But this does not help at all. The “10” is still explicitly written there and I cannot change it easily whenever I need. I run many different dynare models in my routine (closed economies and open economies) and all of them must have the same number of periods T and T2 at each run (and I want to vary these easily).
Thank you so much for your help.
Best,
Felipe
I am not sure I understand. Usually, you would usually define
@#define T = 10
@#define T2=100
and then later
periods 1:@{T}
simul (periods = @{T2})
Alternatively, instead of defining T and T2 in the mod-file, you could pass them at the command line via the -D
switch:
dynare mymodel -DT=10 - DT2=100
Thank you @jpfeifer. It solved my problem.
I was not aware of this -D switch. It will be of great help.
Best,
Felipe
Hi @jpfeifer.
Sorry to ask again, but I now have another question. I want to use the @{}
structure to vary easily the number of countries in my n-country open-economy model. So I will use the -D switch to input the number of countries when I call dynare in my Matlab routine. For example:
eval(['dynare mymodel -Dncountries=' int2str(n_countries)])
Where n_countries
is an input in my Matlab routine.
Then, in the dynare file, I would write:
@#define countries = 1:@{ncountries}
@#for co in countries
…and so on.
However, apparently the macroprocessor does not accept this syntax of a @{}
inside a @#define
directive. I tried many ways to get around this, but was not successful.
Can you help me once again?
Thank you.
Best,
Felipe