To denote a timeseries with a particular frequency, AREMOS uses the dot, for instance x.a is x in its annual version, x.q is quarterly, x.m is monthly, etc. In Gekko 3.0, the dot is already quite busy, since it is used to pick out elements in collections. For instance, #m.x will pick out the timeseries x from the MAP #m (think of #m as a kind of mini-databank), or alternatively #m[‘x’] can be used synonymously. Hence, the dot can be used to pick out elements from 1-dimensional collections, and this is going to be used a lot. Imagine an estimation procedure returning a map #m with all kinds of info, like #m.%r2, #m.residuals, #m.#beta — that is, a scalar with R2, a series with the residuals, a matrix (vector) with the estimated parameters, etc. Now, the timeseries also implement a map-like functionality in the form of so-called array-timeseries. Here, x[‘a’] will pick out the element ‘a’ from the 1-dimensional array-series x, whereas y[‘a’, ‘z’] picks out the element (‘a’, ‘z’) from the two-dimensional array-series y. For one-dimensional timeseries it would be quite obvious to say that x.a is short-hand for x[‘a’], just as #m.x is short-hand for #m[‘x’]. But this interacts badly with the use of dots as frequency indicator, and it would probably create confusion to use dots for both frequencies and element access. A way out of this could be to interpret x.a, x.q and x.m as dimensions of a more general array-timeseries x of some sorts (storing the frequencies inside), but it would be stretching the logic somewhat, especially if x is supposed to have other dimensions than frequencies. For instance, the user would not be able to use the notation x.q[‘a’, ‘b’] for accessing a quarterly array-timeseries, since this would be equivalent to x[‘q’][‘a’, ‘b’] which is not the same as as x[‘q’, ‘a’, ‘b’], because the former would be an array-timeseries with another array-timeseries inside.
In the light of the above, for Gekko 3.0 the frequency indicator will be ‘!’, for instance x!a for x in its annual version, x!q for quarterly, x!m for monthly, etc. At the moment, the ‘!’ is not used for other things, since logical difference uses ‘<>’ instead of ‘!=’, and Gekko will generally use the keyword NOT instead of ‘!’ to denote logical negation.
For AREMOS users, using ‘!’ will probably take a little effort getting used to, but another advantage of using ‘!’ instead of dot for frequencies is that the ‘!’ can be thought of as a sigil alongside the other sigils ‘%’ and ‘#’ (cf. this post and this post). The only difference is that the ‘!’ sigil must be at the end of the timeseries name, followed by the letter indicating the frequency. Hence, the “real” name of the annual timeseries x is really x!a, but if Gekko is running with annual frequency set, a statement like “PRINT x, y;” will intenally be translated into “PRINT x!a, y!a;”, so in most cases the user can omit the frequency indicator. The indicator only comes into play when frequencies are mixed, for instance printing or plotting mixed frequencies, or converting frequencies from one type to another (COLLAPSE/INTERPOLATE). For array-timeseries, the syntax x!q[‘a’, ‘b’] can be used, that is, the element (‘a’, ‘b’) of the quarterly array-timeseries x!q.
It is believed that the improved clarity of using x!a instead of x.a outweighs the disadvantage of getting the users used to the ‘!’. If it turns out to be awkward using ‘!’, Gekko may revert to dots (if possible logically and syntactically), and in that case converting existing command files from ‘!’ to ‘.’ will be an easy search and replace. On the contrary, if Gekko 3.0 starts out using dots for frequencies, and later on changes it to ‘!’, converting existing command files would be more of horror, since dots are used for a lots of other things in Gekko.