The HASH aggregator
Posted: Fri Jun 20, 2014 5:41 pm
The HASH was introduced with RATS 8.2. A HASH is similar to a VECTOR, except that the elements are indexed by strings (called "keys") rather than by numbers. It can't be used directly in calculations the way a VECTOR can, but is instead designed to make it simpler to organize information. You can create a HASH of any data type. The one function which applied to a HASH is %KEYS, which returns a VECTOR[STRINGS] with the keys. The keys aren't case-sensitive, so you can use "abc" or "ABC" or "AbC" to reference the same element.
As with other aggregate types, the data type for a HASH is written as HASH[basetype], such as HASH[REAL] or HASH[VECT[VECT]]. It's important to note that a new element is added to the HASH any time you use a new string, even if it's by mistake. For instance,
dec hash[series] rseries
set rseries("defined") = %ran(1.0)
stats rseries("notdefined")
will add a second (empty) series named "notdefined" to the HASH and give a warning about having no data on the STATISTICS instruction.
An example is the following:
This runs a set of @ADFAUTOSELECT procedures on data, and saves the number of chosen lags into a HASH[INTEGER]. Now LAGS("CANRXRATE") will be the number of lags chosen when S is CANRXRATE and LAGS("ITARXRATE") will be the number chosen when S is ITARXRATE. Note that you have to use "..." around literal strings in referencing an element.
As another example, this creates a HASH[STRING], again indexed by the series names, with long descriptors of the series. These are used in the headers on the graphs and to label regression output.
As with other aggregate types, the data type for a HASH is written as HASH[basetype], such as HASH[REAL] or HASH[VECT[VECT]]. It's important to note that a new element is added to the HASH any time you use a new string, even if it's by mistake. For instance,
dec hash[series] rseries
set rseries("defined") = %ran(1.0)
stats rseries("notdefined")
will add a second (empty) series named "notdefined" to the HASH and give a warning about having no data on the STATISTICS instruction.
An example is the following:
Code: Select all
open data "g7rxrate.xls"
calendar(a) 1970:1
data(format=xls,org=columns) 1970:01 2003:01 canrxrate frarxrate gbrrxrate gerrxrate $
itarxrate jpnrxrate
*
dec hash[integer] lags
dofor s = canrxrate to jpnrxrate
set lx = log(s{0}/s{1})
@adfautoselect(maxlags=4,print,crit=aic) lx
compute lags(%l(s))=%%autop
end dofor s
As another example, this creates a HASH[STRING], again indexed by the series names, with long descriptors of the series. These are used in the headers on the graphs and to label regression output.
Code: Select all
dec hash[string] ln
compute ln("rgnp")="Real GNP"
compute ln("gnp")="Nominal GNP"
compute ln("pcrgnp")="Real GNP(per capita)"
compute ln("ip")="Industrial production"
compute ln("emp")="Employment"
compute ln("un")="Unemployment"
compute ln("prgnp")="GNP Deflator"
compute ln("cpi")="CPI"
compute ln("wg")="Wages"
compute ln("rwg")="Real wages"
compute ln("m")="Money stock"
compute ln("vel")="Velocity"
compute ln("bnd")="Bond yield"
compute ln("sp500")="Stock price"
compute ln("dettrend")="Det. trend"
compute ln("sttrend")="Random walk"
*
spgraph(vfields=4,hfields=4,fillby=rows,footer="Figure 16.1 US annual macroeconomics variables")
dofor y = rgnp to sp500 dettrend sttrend
graph(header=ln(%l(y)))
# y
end dofor y
spgraph(done)
*
set trend = t*.01
*
dofor y = rgnp to sp500 dettrend sttrend
disp ln(%l(y))
linreg(noprint) y
# constant trend
disp %beta
linreg(noprint) y
# constant y{1}
disp %beta
linreg(noprint) y
# constant trend y{1}
disp %beta
end dofor y