Quarterly Bulletin version 1.2

Version 1.2 of the South African Reserve Bank’s Quarterly Bulletin (QB) datasets is now live on EconData. It gives you every bulletin since December 2004 as a separate vintage, on consistent series keys, with base periods separated by patch versions. If you use QB_BUSCYCL, see Always pass a version below.

Datasets

Dataset IDChapterVersions
QB_MONBANKMoney and Banking1.2.0
QB_CAPMARKCapital Market1.2.0
QB_PUBLFINPublic Finance1.2.0
QB_BALNPAYExternal Economic Accounts1.2.0 – 1.2.4
QB_NATLACCNational Accounts1.2.0 – 1.2.3
QB_BUSCYCLGeneral Economic Indicators1.2.0 – 1.2.24
QB_INTECONIntegrated Economic Accounts1.2.0

Each bulletin is a release (vintage). Six datasets run from the December 2004 QB to September 2026, and QB_INTECON from June 2022. Version 1.1.4 remains available, while we removed access to the older minor versions for simplicity.

One version per base period

A minor version (x.2.x) represents a change to the dataset as a whole, like this one, and a patch version (x.x.3) a change in a metadata value. Each patch version holds the bulletins published on one base period, and its dataset description says which. In QB_NATLACC:

VersionReal series onVintages
1.2.0constant 2000 prices2004Q3 – 2009Q2
1.2.1constant 2005 prices2009Q3 – 2014Q2
1.2.2constant 2010 prices2014Q3 – 2021Q1
1.2.3constant 2015 prices2021Q2 – present

QB_BUSCYCL has 25 versions because its indicator families (CPI, PPI, employment, production, sales, the composite indicators and others) are rebased at different times, and a rebase in any one of them starts a new patch version. We placed every boundary by checking the values themselves, for example that an index averages 100 in its base year, not only the SARB’s original metadata, which don’t always change at a rebase. Within a patch version every release is on the same base.

What’s better in 1.2

Base periods

BASE_PER and LABEL now give the base each version’s values are actually on. Many real series previously had no base period at all, and where the SARB’s own description is out of date (its CPI series kept “Index 2016/12 = 100” after moving to December 2021 = 100) we show the correct base. For example, total non-agricultural employment (KBP7009L.Q.N.S.I) reads “Index 2000 = 100” up to QB_BUSCYCL 1.2.11, “Index 2010 = 100” from 1.2.12 and “Index 2015 = 100” from 1.2.20.

No more mixed bases

The apparent jump in real GDP in an archived 2021 vintage, where older 2010-price values sat next to the new 2015-price ones, can’t happen in 1.2: each base period has its own version.

One key per series

A series has the same canonical key in every release and version. Earlier versions sometimes created a second key when the SARB reworded the metadata across time. A few series are also classified more accurately: for example, the effective exchange rate changes in QB_BALNPAY are now percentage changes rather than levels.

A more complete history

The September 2020 QB, the December 2020 QB’s data, and the September 2025 Money and Banking chapter are now included. The files we had for September 2005 turned out to be a copy of September 2006’s, so that bulletin is left out rather than shown with the wrong data.

Cleaning

A break in total employment that the SARB itself corrected in 2016 is corrected in every earlier release, and a one-off jump in a producer price index in the March 2021 vintage is fixed. Weekly Money and Banking series in the 2012–2019 vintages now carry the right dates.

Series metadata comments

Known features of individual series are explained in their COMMENT attribute, for example permanent steps in some capital-stock series, discontinued series, and KBP2150K, a mnemonic the SARB reused: local government’s marketable debt until 2011Q1, and green bond issuance from September 2026 (two separate series, KBP2150K.Q.N.N.LVL and KBP2150K.Q.R.N.LVL in QB_CAPMARK).

Always pass a version for QB_BUSCYCL

If you leave out version, econdatar asks for the “latest” version. At the moment that comparison treats version numbers as text, so “1.2.9” counts as later than “1.2.24”, and you get QB_BUSCYCL 1.2.9, which holds only the June 2013 QB. The other QB datasets aren’t affected, because their version numbers are still single digits. Until this is fixed, pass the version:

read_dataset("QB_BUSCYCL", version = "1.2.24")

We may fix the API, in which case you won’t need to worry about this in future. If we fix it in the econdatar package (Issue 46), you’ll need to reinstall it:

remotes::install_github("coderaanalytics/econdatar")

Working with 1.2 in R

List a dataset’s 1.2 versions and their releases

library(econdatar)
library(dplyr)

accounts <- read_registry("dataflow", id = "QB_NATLACC", version = "all")
Filter(function(f) startsWith(f$version, "1.2."), accounts) |>
  sapply(function(f) paste(f$version, f$description))

rel <- read_release("QB_NATLACC", version = "all")
rel12 <- rel[startsWith(names(rel), "v1.2.")]
# Order the list items by version number
rel12 <- rel12[order(numeric_version(sub("^v", "", names(rel12))))]

Get all revisions of a series value

with hist_obs = TRUE (it needs tidy = FALSE). With version = "all" you get every version, including 1.1, so keep the 1.2 ones:

key <- "KBP6006D.Q.R.S.LA"
x <- read_dataset("QB_NATLACC", version = "all", series_key = key,
                  tidy = FALSE, hist_obs = TRUE)
v12 <- Filter(function(d) startsWith(attr(d, "metadata")$version, "1.2."), x)
revisions <- bind_rows(lapply(v12, function(d)
  mutate(d[[key]], version = attr(d, "metadata")$version)))

filter(revisions, TIME_PERIOD == "2021-01-01") %>% arrange(created)
Time PeriodVintageReal GDP ValueVersion (Base Period)
2021Q1Jun 20213 044 4651.2.2
2021Q1Sep 20214 471 2581.2.3
2021Q1Dec 20214 466 8261.2.3
2021Q1Mar 20224 471 9551.2.3
2021Q1Jun 20224 483 2901.2.3
2021Q1Jun 20234 496 6411.2.3
2021Q1Jun 20244 486 4931.2.3
2021Q1Jun 20254 484 8311.2.3
2021Q1 real GDP revisions, extracted with the read_dataset(hist_obs = TRUE, tidy = FALSE) option

Each row is one published value with the time it was published (created, in UTC): real GDP for 2021Q1 has one value in 1.2.2, from the June 2021 QB at 2010 prices, and one for each revision since in 1.2.3, at 2015 prices.

Check a series’ metadata (base period and notes)

ppi <- read_dataset("QB_BUSCYCL", version = "1.2.17",   # PPI on December 2020 = 100
                    series_key = "KBP7180N.M.N.S.I", wide = FALSE)
ppi$metadata[c("label", "base_period", "comment")]

Tl;dr

  • Pass version explicitly for QB_BUSCYCL.
  • Check COMMENT and BASE_PER before combining releases or versions.