Chapter 7. Joining data sources
60
Appendix: the full Mroz data script
# start with everybody; get gender, age and a few other variables
# directly while we’re at it
open SHIW/carcom10.csv --cols=1,2,3,4,9,10,29,41
# subsample on married women between the ages of 30 and 60
smpl SEX==2 && ETA>=30 && ETA<=60 && STACIV==1 --restrict
# for simplicity, restrict to heads of households and their spouses
smpl PARENT<3
--restrict
# rename the age and education variables for compatibility; compute
# the "city" dummy and finally save the reduced base dataset
rename ETA WA
rename STUDIO WE
series CIT = (ACOM4C>2)
store mroz_rep.gdt
# make a temp file holding annual hours worked per job
open SHIW/allb1.csv --cols=1,2,8,11 --quiet
series HRS = misszero(ORETOT) * 52 * misszero(MESILAV)/12
store HRS.csv NQUEST NORD HRS
# reopen the base dataset and begin drawing assorted data in
open mroz_rep.gdt
# women’s annual hours (summed across jobs)
join HRS.csv WHRS --ikey=NQUEST,NORD --data=HRS --aggr=sum
WHRS = misszero(WHRS)
# labor force participation
LFP = WHRS > 0
# work experience: ETALAV = age when started first job
join SHIW/lavoro.csv ETALAV --ikey=NQUEST,NORD
series AX = misszero(WA - ETALAV)
# women’s hourly wages
join SHIW/rper10.csv YL YM --ikey=NQUEST,NORD --aggr=sum
series WW = LFP ? (YL + YM)/WHRS : 0
# family income (Y = net disposable income)
join SHIW/rfam10.csv FAMINC --ikey=NQUEST --data=Y
# get data on children using the "count" method
join SHIW/carcom10.csv KIDS --ikey=NQUEST --aggr=count --filter="ETA<=18"
join SHIW/carcom10.csv KL6 --ikey=NQUEST --aggr=count --filter=ETA<6
series K618 = KIDS - KL6
# data on husbands: we first construct an auxiliary inner key for
# husbands, using the little trick of subsampling the inner dataset
#
# for women who are household heads
smpl PARENT==1 --restrict --replace
join SHIW/carcom10.csv H_ID --ikey=NQUEST --data=NORD --filter="PARENT==2"
# for women who are not household heads
smpl PARENT==2 --restrict --replace
join SHIW/carcom10.csv H_ID --ikey=NQUEST --data=NORD --filter="PARENT==1"
smpl full
Pdf page to powerpoint - Library software component:C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
www.rasteredge.com
Pdf page to powerpoint - Library software component:VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
www.rasteredge.com
Chapter 7. Joining data sources
61
# add husbands’ data via the newly-added secondary inner key
join SHIW/carcom10.csv HA --ikey=NQUEST,H_ID --okey=NQUEST,NORD --data=ETA
join SHIW/carcom10.csv HE --ikey=NQUEST,H_ID --okey=NQUEST,NORD --data=STUDIO
join HRS.csv HHRS --ikey=NQUEST,H_ID --okey=NQUEST,NORD --data=HRS --aggr=sum
HHRS = misszero(HHRS)
# final cleanup begins
# recode educational attainment as years of education
matrix eduyrs = {0, 5, 8, 11, 13, 16, 18, 21}
series WE = replace(WE, seq(1,8), eduyrs)
series HE = replace(HE, seq(1,8), eduyrs)
# cut some cruft
delete SEX STACIV KIDS YL YM PARENT H_ID ETALAV
# add some labels for the series
setinfo LFP -d "1 if woman worked in 2010"
setinfo WHRS -d "Wife’s hours of work in 2010"
setinfo KL6 -d "Number of children less than 6 years old in household"
setinfo K618 -d "Number of children between ages 6 and 18 in household"
setinfo WA -d "Wife’s age"
setinfo WE -d "Wife’s educational attainment, in years"
setinfo WW -d "Wife’s average hourly earnings, in 2010 euros"
setinfo HHRS -d "Husband’s hours worked in 2010"
setinfo HA -d "Husband’s age"
setinfo HE -d "Husband’s educational attainment, in years"
setinfo FAMINC -d "Family income, in 2010 euros"
setinfo AX -d "Actual years of wife’s previous labor market experience"
setinfo CIT -d "1 if live in large city"
# save the final product
store mroz_rep.gdt
Library software component:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
XDoc.PDF ›› VB.NET PDF: Delete PDF Page. using RasterEdge.Imaging.Basic; using RasterEdge.XDoc.PDF; How to VB.NET: Delete a Single PDF Page from PDF File.
www.rasteredge.com
Library software component:C# PDF Page Insert Library: insert pages into PDF file in C#.net
C# programmers are capable of adding and inserting (empty) PDF page or pages from various file formats, such as PDF, Tiff, Word, Excel, PowerPoint, Bmp, Jpeg
www.rasteredge.com
Chapter 8
Realtime data
8.1 Introduction
As of gretl version 1.9.13 the join command (see chapter7) has been enhanced to deal with so-
called realtime datasets in a straightforward manner. Such datasets contain information on when
the observations in a time series were actually published by the relevant statistical agency and how
they have been revised over time. Probably the most popular sources of such data are the “Alfred”
online database at the St. Louis Fed (http://alfred.stlouisfed.org/) and the OECD’s StatEx-
tracts site, http://stats.oecd.org/. The examples in this chapter deal with files downloaded
from these sources, but should be easy to adapt to files with a slightly different format.
As already stated, join requires a column-oriented plain text file, where the columns may be sepa-
ratedby commas, tabs, spaces or semicolons. Alfredand the OECD provide the option to download
realtime data in this format (tab-delimited files from Alfred, comma-delimited from the OECD). If
you have a realtime dataset in a spreadsheet file you must export it to a delimited text file before
using it with join.
Representing revision histories is more complex than just storing a standard time series, because
for each observation period you have in general more than one published value over time, along
with the information on when each of these values were valid or current. Sometimes this is repre-
sented in spreadsheets with two time axes, one for the observation period and another one for the
publication date or “vintage”. The filled cells then form an upper triangle (or a “guillotine blade”
shape, if the publication dates do not reach back far enough to complete the triangle). This format
can be useful for giving a human reader an overview of realtime data, but it is not optimal for
automatic processing; for that purpose “atomic” format is best.
8.2 Atomic format for realtime data
What we are calling atomic format is exactly the format used by Alfred if you choose the option
“Observations by Real-Time Period”, and by the OECD if you select all editions of a series for
downloadas plain text (CSV).
1
Afile in this format contains one actual data-point per line, together
with associated metadata. This is illustrated in Table8.1, where we show the first three lines from
an Alfred file and an OECD file (slightly modified).
2
Considerthe first data linein the Alfredfile: in theobservation_date columnwe find1960-01-01,
indicating that the data-point on this line, namely 112.0, is an observation or measurement (in this
case, of the US index of industrial production) that refers to the period starting on January 1st
1960. The realtime_start_date value of 1960-02-16 tells us that this value was published on
February 16th 1960, and the realtime_end_date value says that this vintage remained current
through March 15th 1960. On the next day (as we can see from the following line) this data-point
was revised slightly downward to 111.0.
Daily dates in Alfred files are given in ISO extended format, YYYY-MM-DD, but below we describe
how to deal with differently formatted dates. Note that daily dates are appropriate for the last
1IfyouchoosetodownloadinExcelformatfromOECDyougetafileinthetriangularorguillotineformatmentioned
above.
2
In the Alfred file we have used commas rather than tabs as the column delimiter; in the OECD example we have
shortenedthename in the Variable column.
62
Library software component:VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
PDF Pages. |. Home ›› XDoc.PDF ›› VB.NET PDF: Insert PDF Page. Professional .NET PDF control for inserting PDF page in Visual Basic .NET class application.
www.rasteredge.com
Library software component:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
Pages. |. Home ›› XDoc.PDF ›› C# PDF: Delete PDF Page. Demo Code: How to Delete a Single PDF Page from PDF File in C#.NET. How
www.rasteredge.com
Chapter 8. Realtime data
63
Alfred: monthly US industrial production
observation_date,INDPRO,realtime_start_date,realtime_end_date
1960-01-01,112.0000,1960-02-16,1960-03-15
1960-01-01,111.0000,1960-03-16,1961-10-15
OECD: monthly UK industrial production
Country,Variable,Frequency,Time,Edition,Value,Flags
"United Kingdom","INDPRO","Monthly","Jan-1990","February 1999",100,
"United Kingdom","INDPRO","Monthly","Feb-1990","February 1999",99.3,
Table 8.1: Variant atomic formats for realtimedata
two columns, which jointly record the interval over which a given data vintage was current. Daily
dates might, however, be considered overly precise for the first column, since the data period may
well be the year, quarter or month (as it is in fact here). However, following Alfred’s practice it is
acceptable to specify a daily date, indicating the first day ofthe period, even for non-daily data.3
Compare the first data line of the OECD example. There’s a greater amount of leading metadata,
which is left implicit in the Alfred file. Here Time is the equivalent of Alfred’s observation_date,
and Edition the equivalent of Alfred’s realtime_start_date. So we read that in February 1999
avalue of 100 was current for the UK index of industrial production for January 1990, and from
the next line we see that in the same vintage month a value of 99.3 was current for industrial
production in February 1990.
Besides the different names and ordering of the columns, there are a few more substantive differ-
ences between Alfred and OECD files, most of which are irrelevant for join but some of which are
(possibly) relevant.
The first (irrelevant) difference is the ordering of the lines. It appears (though we’re not sure how
consistent this is) that in Alfred files the lines are sorted by observation date first and then by
publication date—so that all revisions of a given observation are grouped together—while OECD
files are sortedfirst by revision date (Edition) and then by observation date (Time). If we want the
next revision of UK industrial production for January 1990 in the OECD file we have to scan down
several lines until we find
"United Kingdom","INDPRO","Monthly","Jan-1990","March 1999",100,
This difference is basically irrelevant because join can handle the case where the lines appear in
random order, although some operations can be coded more conveniently if we’re able to assume
chronological ordering (either on the Alfred or the OECD pattern, it doesn’t matter).
The second (also irrelevant) difference is that the OECD seems to include periodic “Edition” lines
even when there is no change from the previous value (as illustrated above, where the UK industrial
production indexfor January 1990 isreported as 100 asof March 1999, the same value that we saw
to be current in February 1999), while Alfred reports a new value only when it differs from what
was previously current.
Athird difference lies in the dating of the revisions or editions. As we have seen, Alfred gives
aspecific daily date while (in the UK industrial production file at any rate), the OECD just dates
each edition to a month. This is not necessarily relevant for join, but it does raise the question of
whether the OECD might date revisions to a finer granularity in some of their files, in which case
one would have to be on the lookout for a different date format.
The final difference is that Alfred supplies an “end date” for each data vintage while the OECD
3
NoticethatthisimpliesthatintheAlfredexampleitisnotclearwithoutfurtherinformationwhetherthe observation
period isthe first quarter of 1960, the month January 1960, or the day January 1st 1960. However, we assume thatthis
information isalways available incontext.
Library software component:C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
PowerPoint, VB.NET Tiff, VB.NET Imaging, VB.NET OCR, VB.NET Twain, VB.NET Barcode Read, VB.NET Barcode Generator, view less. C# PDF - Modify PDF File and Page
www.rasteredge.com
Library software component:How to C#: Overview of Using XDoc.PowerPoint
Create and Edit PowerPoint Page and File. Tell C# users Please click to see details. Annotate PowerPoint Page. Various annotation objects
www.rasteredge.com
Chapter 8. Realtime data
64
supplies only a starting date. But there is less to this difference than meets the eye: according to
the Alfred webmaster, “by design, a new vintage must start immediately following (the day after)
the lapse of the old vintage”—so the end date conveys no independent information.
4
8.3 More on time-related options
Before we get properly started it is worth saying a little more about the --tkey and --tconvert
options to join (first introduced in section7.11), as they apply in the case of realtime data.
When you’re working with regular time series data tkey is likely to be useful while tconvert is
unlikely to be applicable (see section7.10). On the other hand, when you’re working with panel data
tkey is definitely not applicable but tconvert may well be helpful (section7.12). When working
with realtime data, however, depending on the task in hand both options may be useful. You will
likely need tkey; you may well wish to select at least one column for tconvert treatment; and in
fact you may want to name a given column in both contexts—that is, include the tkey variable
among the tconvert columns.
Why might this make sense? Well, think of the --tconvert option as a “preprocessing” directive:
it asks gretl to convert date strings to numerical values (8-digit ISO basic dates) “at source”, as they
are read from the outer datafile. The --tkey option, on the other hand, singles out a column as
the one to use for matching rows with the inner dataset. So you would want to name a column in
both roles if(a) it shouldbe used for matching periods andalso (b) it is desirable to have the values
from this column in numerical form, most likely for use in filtering.
As we have seen, you can supply specific formats in connection with both tkey and tconvert (in
thelatter case via the companion option --tconv-fmt) to handle the casewhere thedate strings on
the right are not ISO-friendly at source. This raises the question of how the format specifications
work if a given column is named under both options. Here are the rules that gretl applies:
1. If a format is given with the --tkey option it always applies to the tkey column alone; and
for that column it overrides any format given via the --tconv-fmt option.
2. If a format is given via tconv-fmt it is assumed to apply to all the tconvert columns, unless
this assumption is overriden by rule 1.
8.4 Getting a certain data vintage
The most common application of realtime data is to “travel back in time” and retrieve the data that
were current as of a certain date in the past. This would enable you to replicate a forecast or other
statistical result that could have been produced at that date.
For example, suppose we are interested in a variable ofmonthly frequency named INDPRO, realtime
data on which is stored in an Alfred file named INDPRO.txt, and we want to check the status quo
as of June 15th 2011.
Ifwe don’t already have a suitable dataset into which to import the INDPRO data,our first steps will
be to create an appropriately dimensioned empty dataset using the nulldata command and then
specify its time-series character via setobs, as in
nulldata 132
setobs 12 2004:01
For convenience we can put the name of our realtime file into a string variable. On Windows this
might look like
4
Email received from Travis May of the Federal Reserve Bankof St. Louis, 2013-10-17. This closes off thepossibility
that a given vintage could lapse or expire some time before the next vintage becomes available, hence giving rise to a
“hole” inan Alfredrealtime file.
Library software component:C# PowerPoint - Sort PowerPoint Pages Order in C#.NET
C#.NET. Support Customizing Page Order of PowerPoint Document in C# Project. Overview. splitting. C# DLLs: Move PowerPoint Page Position. Add
www.rasteredge.com
Library software component:C# PowerPoint - Delete PowerPoint Document Page in C#.NET
C# DLLs: Delete Page from PowerPoint File. Delete a Single PowerPoint Page from PowerPoint File in C#. How to delete a single page from a PowerPoint document.
www.rasteredge.com
Chapter 8. Realtime data
65
string fname = "C:/Users/yourname/Downloads/INDPRO.txt"
We can then import the data vintage2011-06-15 usingjoin, arbitrarilychoosingthe self-explanatory
identifier ip_asof_20110615.
join @fname ip_asof_20110615 --tkey=observation_date --data=INDPRO \
--tconvert="realtime_start_date" \
--filter="realtime_start_date<=20110615" --aggr=max(realtime_start_date)
Here some detailed explanations of the various options are warranted:
 The --tkey option specifies the column which should be treated as holding the observation
period identifiers to be matched against the periods in the current gretl dataset.5 The more
general form of this option is --tkey="colname,format" (note the double quotes here), so
if the dates do not come in standard format, we can tell gretl how to parse them by using
the appropriate conversion specifiers as shown in Table7.2. For example, here we could have
written --tkey="observation_date,%Y-%m-%d".
 Next, --data=INDPRO tells gretl that we want to retrieve the entries stored in the column
named INDPRO.
 As explained in section7.11 the --tconvert option selects certain columns in the right-hand
data file for conversion from date strings to 8-digit numbers on the pattern YYYYMMDD. We’ll
need this for the next step, filtering, since the transformation to numerical values makes
it possible to perform basic arithmetic on dates. Note that since date strings in Alfred files
conform to gretl’s default assumption it is not necessary touse the --tconv-fmt option here.
 The --filter option specification in combination with the subsequent --aggr aggregation
treatment is the central piece of our data retrieval; notice how we use the date constant
20110615 in ISO basic form to do numerical comparisons, and howwe perform the numerical
max operation on the converted column realtime_start_date. It would also have been
possible to predefine a scalar variable, as in
vintage = 20110615
and then use vintage in the join command instead. Here we tell join that we only want to
extract those publications that (1) already appeared before (and including) June 15th 2011,
and (2) were not yet obsoleted by a newer release.
6
As a result, your dataset will now contain a time series named ip_asof_20110615 with the values
that a researcher would have had available on June 15th 2011. Ofcourse, all values for the observa-
tions after June 2011 will be missing (and probably a few before that, too), because they only have
become available later on.
8.5 Getting the n-th release for each observation period
For some purposes it may be useful to retrieve the n-th published value of each observation,where
nis a fixed positive integer, irrespective of when each of these n-th releases was published. Sup-
pose we are interested in the third release, then the relevant join command becomes:
join @fname ip_3rdpub --tkey=observation_date --data=INDPRO --aggr="seq:3"
5
Strictly speaking, using --tkey is unnecessary in this example because we could just have relied on the default,
whichistouse the firstcolumn in the sourcefile for theperiods. However, being explicitis often a good idea.
6
By implementing the second condition through the max aggregation on the realtime_start_date column alone,
withoutusing therealtime_end_datecolumn, wemakeuseofthe factthatAlfred filescannothave“holes”asexplained
before.
Chapter 8. Realtime data
66
Since we do not need the realtime_start_date information for this retrieval, we have dropped
the --tconvert option here. Note that this formulation assumes that the source file is ordered
chronologically, otherwise using the option --aggr="seq:3", which retrieves the third value from
each sequence of matches, could have yielded a result different from the one intended. However,
this assumption holds for Alfred files and is probably rather safe in general.
The values of the variable imported as ip_3rdpub in this way were published at different dates,
so the variable is effectively a mix of different vintages. Depending on the type of variable, this
may also imply drastic jumps in the values; for example, index numbers are regularly re-based
to different base periods. This problem also carries over to inflation-adjusted economic variables,
where the base period of the price index changes over time. Mixing vintages in general also means
mixing different scales in the output, with which you wouldhave to deal appropriately.7
8.6 Getting the values at a fixed lag after the observation period
New data releases may take place on any day of the month, and as we have seen the specific day
of each release is recorded in realtime files from Alfred. However, if you are working with, say,
monthly or quarterly data you may sometimes want to adjust the granularity of your realtime axis
to a monthly or quarterly frequency. For example, in order to analyse the data revision process for
monthly industrial production you might be interested in the extent of revisions between the data
available two and three months after each observation period.
This is a relatively complicatedtask and there is more than one way ofaccomplishingit. Either you
have to make several passes through the outer dataset or you need a sophisticated filter, written
as a hansl function. Either way you will want to make use of some of gretl’s built-in calendrical
functions.
We’ll assume that a suitably dimensioned workspace has been set up as described above. Given
that, the key ingredients of the join are a filtering function which we’ll call rel_ok (for “release is
OK”) and the join command which calls it. Here’s the function:
function series rel_ok (series obsdate, series reldate, int p)
series y_obs, m_obs, y_rel, m_rel
# get year and month from observation date
isoconv(obsdate, &y_obs, &m_obs)
# get year and month from release date
isoconv(reldate, &y_rel, &m_rel)
# find the delta in months
series dm = (12*y_rel + m_rel) - (12*y_obs + m_obs)
# and implement the filter
return dm <= p
end function
And here’s the command:
scalar lag = 3
# choose your fixed lag here
join @fname ip_plus3 --data=INDPRO --tkey=observation_date \
--tconvert="observation_date,realtime_start_date" \
--filter="rel_ok(observation_date, realtime_start_date, lag)" \
--aggr=max(realtime_start_date)
Note that we use --tconvert to convert both the observation date and the realtime start date (or
release date) to 8-digit numerical values. Both ofthese series are passed to the filter, which uses the
7
Some user-contributed functions may beavailable thataddress this issue, butit isbeyond our scope here. Another
even more complicated issue in the realtime context is that of “benchmark revisions” applied by statistical agencies,
where the underlying definition or composition ofa variable changesonsome date,whichgoesbeyond a mere rescaling.
However, thistypeofstructuralchangeisnot, inprinciple,a feature ofrealtimedata alone,butappliestoany time-series
data.
Chapter 8. Realtime data
67
built-in function isoconv to extract year and month. We can then calculate dm, the “delta months”
since the observation date, for each release. The filter condition is that this delta should be no
greater than the specified lag, p.
8
This filter condition may be satisfied by more than one release, but only the latest of those will
actually be the vintage that was current at the end of the n-th month after the observation period,
so we add the option --aggr=max(realtime_start_date). If instead you want to target the
release at the beginning of the n-th month you would have to use a slightly more complicated filter
function.
An illustration
Figure8.1 shows four time series for the monthly index of US industrial production from October
2005 to June 2009: the value as of first publication plus the values current 3, 6 and 12 months out
from the observation date.
9
From visual inspection it would seem that over much of this period
the Federal reserve was fairly consistently overestimatingindustrial production at first release and
shortly thereafter, relative to the figure they arrived at with a lag of a year.
The script that producedthis Figure is shown in full in Example8.1. Note that in this script we are
using a somewhat more efficient version of the rel_ok function shown above, where we pass the
required series arguments in “pointer” form to avoid having to copy them (see chapter13).
94
96
98
100
102
104
106
108
110
112
114
116
2006
2007
2008
2009
First publication
Plus 3 months
Plus 6 months
Plus 12 months
Figure 8.1: Successiverevisions to US industrial production
8.7 Getting the revision history for an observation
For our final example we show how to retrieve the revision history for a given observation (again
using Alfred data on US industrial production). In this exercise we are switching the time axis: the
observation period is a fixed point and time is “vintage time”.
Asuitable script is shown in Example8.2. We first select an observation to track (January 1970).
We start the clock in the following month, when a data-point for this period was first published,
8
The filter is writtenon the assumption thatthe lag is expressed in months; on that understanding itcould be used
with annual or quarterly data as well as monthly. The idea could be generalized to cover weekly or daily data without
much difficulty.
9
Whynota longerseries? Because ifwetrytoextenditineither directionweimmediatelyrunintotheindexre-basing
problem mentioned in section8.5, with big (staggered) leaps downwardinallthe series.
Chapter 8. Realtime data
68
Example 8.1: Retrieving successive realtimelags of US industrial production
function series rel_ok (series *obsdate, series *reldate, int p)
series y_obs, m_obs, y_rel, m_rel
isoconv(obsdate, &y_obs, &m_obs)
isoconv(reldate, &y_rel, &m_rel)
series dm = (12*y_rel + m_rel) - (12*y_obs + m_obs)
return dm <= p
end function
nulldata 45
setobs 12 2005:10
string fname = "INDPRO.txt"
# initial published values
join @fname firstpub --data=INDPRO --tkey=observation_date \
--tconvert=realtime_start_date --aggr=min(realtime_start_date)
# plus 3 months
join @fname plus3 --data=INDPRO --tkey=observation_date \
--tconvert="observation_date,realtime_start_date" \
--filter="rel_ok(&observation_date, &realtime_start_date, 3)" \
--aggr=max(realtime_start_date)
# plus 6 months
join @fname plus6 --data=INDPRO --tkey=observation_date \
--tconvert="observation_date,realtime_start_date" \
--filter="rel_ok(&observation_date, &realtime_start_date, 6)" \
--aggr=max(realtime_start_date)
# plus 12 months
join @fname plus12 --data=INDPRO --tkey=observation_date \
--tconvert="observation_date,realtime_start_date" \
--filter="rel_ok(&observation_date, &realtime_start_date, 12)" \
--aggr=max(realtime_start_date)
setinfo firstpub --graph-name="First publication"
setinfo plus3 --graph-name="Plus 3 months"
setinfo plus6 --graph-name="Plus 6 months"
setinfo plus12 --graph-name="Plus 12 months"
gnuplot firstpub plus3 plus6 plus12 --time --with-lines \
--output=realtime.pdf { set key left bottom; }
Chapter 8. Realtime data
69
and let it run to the end of the vintage history (in this file, March 2013). Our outer time key is
the realtime start date and we filter on observation date; we name the imported INDPRO values as
ip_jan70. Since it sometimes happens that more than one revision occurs in a given month we
need to select an aggregation method: here we choose to take the last revision in the month.
Recall from section8.2 that Alfred records a new revision only when the data-point in question
actually changes. This means that our imported series will contain missing values for all months
when no real revision took place. However, we can apply a simple autoregressive procedure to fill
in the data: each missing value equals the prior non-missing value.
Figure8.2 displays the revision history. Over this sample period the periodic re-basingof the index
overshadows amendments due to accrual of new information.
Example 8.2: Retrieving a revision history
# choose the observation to track here (YYYYMMDD)
scalar target = 19700101
nulldata 518 --preserve
setobs 12 1970:02
join INDPRO.txt ip_jan70 --data=INDPRO --tkey=realtime_start_date \
--tconvert=observation_date \
--filter="observation_date==target" --aggr=seq:-1
ip_jan70 = ok(ip_jan70) ? ip_jan70 : ip_jan70(-1)
20
40
60
80
100
120
140
160
180
1970
1975
1980
1985
1990
1995
2000
2005
2010
ip_jan70
Figure 8.2: Vintages of the index of US industrial production forJanuary 1970
Documents you may be interested
Documents you may be interested