Short-Term Statistics - STS

Data - ECB

Info

source dataset .html .RData
ecb STS 2024-12-29 2025-05-18

Data on wages

source dataset .html .RData
eurostat earn_mw_cur 2025-02-01 2025-04-26
eurostat ei_lmlc_q 2025-02-01 2025-04-26
eurostat lc_lci_lev 2025-02-01 2025-04-26
eurostat lc_lci_r2_q 2025-02-01 2025-04-26
eurostat nama_10_lp_ulc 2025-02-01 2025-04-26
eurostat namq_10_lp_ulc 2025-02-01 2025-04-26
eurostat tps00155 2025-01-26 2025-04-26
fred wage 2025-05-18 2025-05-18
ilo EAR_4MTH_SEX_ECO_CUR_NB_A 2024-06-20 2023-06-01
ilo EAR_XEES_SEX_ECO_NB_Q 2024-06-20 2023-06-01
oecd AV_AN_WAGE 2024-11-22 2024-11-22
oecd AWCOMP 2024-09-15 2023-09-09
oecd EAR_MEI 2024-04-16 2024-04-16
oecd HH_DASH 2024-09-15 2023-09-09
oecd MIN2AVE 2024-09-15 2023-09-09
oecd RMW 2024-09-15 2024-03-12
oecd ULC_EEQ 2024-09-15 2024-04-15

LAST_DOWNLOAD

LAST_DOWNLOAD
2025-05-18

LAST_COMPILE

LAST_COMPILE
2025-05-18

Last

Code
STS %>%
  group_by(TIME_PERIOD) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(TIME_PERIOD)) %>%
  head(1) %>%
  print_table_conditional()
TIME_PERIOD Nobs
2025-Q1 45

STS_CONCEPT

All

Code
STS %>%
  left_join(STS_CONCEPT,  by = "STS_CONCEPT") %>%
  group_by(STS_CONCEPT, Sts_concept) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Monthly

Code
STS %>%
  filter(FREQ == "M") %>%
  left_join(STS_CONCEPT,  by = "STS_CONCEPT") %>%
  group_by(STS_CONCEPT, Sts_concept) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

STS_CLASS

Code
STS %>%
  left_join(STS_CLASS,  by = "STS_CLASS") %>%
  group_by(STS_CLASS, Sts_class) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

TITLE

All

Code
STS %>%
  group_by(TITLE) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Monthly

Code
STS %>%
  filter(FREQ == "M") %>%
  group_by(TITLE) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

ADJUSTMENT

Code
STS %>%
  left_join(ADJUSTMENT,  by = "ADJUSTMENT") %>%
  group_by(ADJUSTMENT, Adjustment) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
ADJUSTMENT Adjustment Nobs
N Neither seasonally nor working day adjusted 663796
W Working day adjusted, not seasonally adjusted 430364
Y Working day and seasonally adjusted 424946
S Seasonally adjusted, not working day adjusted 8457

FREQ

Code
STS %>%
  left_join(FREQ,  by = "FREQ") %>%
  group_by(FREQ, Freq) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
FREQ Freq Nobs
M Monthly 1474666
Q Quarterly 46138
A Annual 6759

REF_AREA

Code
STS %>%
  left_join(REF_AREA,  by = "REF_AREA") %>%
  group_by(REF_AREA, Ref_area) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()

TIME_FORMAT

Code
STS %>%
  group_by(TIME_FORMAT) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
TIME_FORMAT Nobs
P1M 1474666
P3M 46138
P1Y 6759

PROD - Industrial Production Index

Table

Code
STS %>%
  filter(STS_CONCEPT == "PROD",
         FREQ == "M",
         REF_AREA == "I7") %>%
  left_join(STS_CLASS,  by = "STS_CLASS") %>%
  group_by(KEY, STS_CLASS, Sts_class, UNIT, TITLE, TITLE_COMPL) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

INWR - Negociated Wage Rates

Table

Code
STS %>%
  filter(STS_CONCEPT == "INWR",
         FREQ == "Q") %>%
  left_join(STS_CLASS,  by = "STS_CLASS") %>%
  group_by(KEY, STS_CLASS, Sts_class, UNIT, TITLE, TITLE_COMPL) %>%
  summarise(Nobs = n()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Quarterly

Code
STS %>%
  filter(STS_CONCEPT == "INWR") %>%
  filter(FREQ == "Q") %>%
  quarter_to_date() %>%
  select(date, OBS_VALUE, REF_AREA) %>%
  ggplot() +  ylab("") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE/100, color = REF_AREA)) +
  #scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.65, 0.15),
        legend.title = element_blank()) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, 1),
                     labels = percent_format(accuracy = 1))

Annual

Code
STS %>%
  filter(STS_CONCEPT == "INWR") %>%
  filter(FREQ == "A") %>%
  year_to_date() %>%
  select(date, OBS_VALUE, REF_AREA) %>%
  ggplot() +  ylab("") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE/100, color = REF_AREA)) +
  #scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.65, 0.15),
        legend.title = element_blank()) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, 1),
                     labels = percent_format(accuracy = 1))

U2

All

Code
STS %>%
  filter(KEY %in% c("STS.Q.U2.N.INWR.000000.3.ANR")) %>%
  quarter_to_date() %>%
  select(date, OBS_VALUE, REF_AREA) %>%
  ggplot() +  ylab("") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE/100)) +
  #scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.65, 0.15),
        legend.title = element_blank()) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, 1),
                     labels = percent_format(accuracy = 1))

2017

Code
STS %>%
  filter(KEY %in% c("STS.Q.U2.N.INWR.000000.3.ANR")) %>%
  quarter_to_date() %>%
  filter(date >= as.Date("2017-01-01")) %>%
  select(date, OBS_VALUE, REF_AREA) %>%
  ggplot() +  ylab("") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE/100)) +
  #scale_color_manual(values = viridis(4)[1:3]) +
  theme(legend.position = c(0.65, 0.15),
        legend.title = element_blank()) +
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, 1),
                     labels = percent_format(accuracy = 1))