Job Openings and Labor Turnover Survey - JT

Data - BLS

Info

source dataset .html .RData
bls jt 2024-05-01 NA

Data on employment

source dataset .html .RData
bls jt 2024-05-01 NA
bls la 2024-01-06 NA
bls ln 2024-01-06 NA
eurostat nama_10_a10_e 2024-04-18 2024-04-18
eurostat nama_10_a64_e 2024-04-18 2024-04-18
eurostat namq_10_a10_e 2024-04-18 2024-04-18
eurostat une_rt_m 2024-04-18 2024-04-18
oecd ALFS_EMP 2024-04-16 2024-01-26
oecd EPL_T 2024-04-16 2023-12-10
oecd LFS_SEXAGE_I_R 2024-04-16 2024-04-15
oecd STLABOUR 2024-04-16 2024-04-15

LAST_DOWNLOAD

LAST_DOWNLOAD
2024-03-20

LAST_COMPILE

LAST_COMPILE
2024-05-01

Last

date Nobs
2024-03-01 913

jt.industry

Code
jt.data.1.AllItems %>%
  left_join(jt.series, by = "series_id") %>%
  left_join(jt.industry, by = "industry_code") %>%
  group_by(industry_code, industry_text) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional

jt.dataelement

Code
jt.data.1.AllItems %>%
  left_join(jt.series, by = "series_id") %>%
  left_join(jt.dataelement, by = "dataelement_code") %>%
  group_by(dataelement_code, dataelement_text) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional
dataelement_code dataelement_text Nobs
HI Hires 103294
JO Job openings 103294
LD Layoffs and discharges 103294
OS Other separations 44032
QU Quits 103294
TS Total separations 103294
UO Unemployed persons per job opening ratio 14509

jt.ratelevel

Code
jt.data.1.AllItems %>%
  left_join(jt.series, by = "series_id") %>%
  left_join(jt.ratelevel, by = "ratelevel_code") %>%
  group_by(ratelevel_code, ratelevel_text) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional
ratelevel_code ratelevel_text Nobs
L Level - In Thousands 280251
R Rate 294760

jt.region

Code
jt.region %>%
  {if (is_html_output()) print_table(.) else .}
region_code region_text display_level selectable sort_sequence
00 Total US 0 T 1
MW Midwest (Only available for Total Nonfarm) 1 T 4
NE Northeast (Only available for Total Nonfarm) 1 T 2
SO South (Only available for Total Nonfarm) 1 T 3
WE West (Only available for Total Nonfarm) 1 T 5

jt.seasonal

Code
jt.data.1.AllItems %>%
  left_join(jt.series, by = "series_id") %>%
  left_join(jt.seasonal, by = c("seasonal" = "seasonal_code")) %>%
  group_by(seasonal, seasonal_text) %>%
  summarise(Nobs = n()) %>%
  print_table_conditional
seasonal seasonal_text Nobs
S Seasonally Adjusted 284479
U Not Seasonally Adjusted 290532

Monthly Job Openings, Layoffs and Quits, in Thousands

All

Code
jt.data.1.AllItems %>%
  filter(series_id %in% c("JTS000000000000000LDL",
                          "JTS000000000000000QUL",
                          "JTS000000000000000JOL")) %>%
  left_join(jt.series, by = "series_id") %>%
  left_join(jt.dataelement, by = "dataelement_code") %>%
  month_to_date %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = "")) +
  xlab("") + ylab("Monthly Levels ('000s)")

Monthly Hires and Separations, in Thousands

All

Code
jt.data.1.AllItems %>%
  filter(series_id %in% c("JTS000000000000000HIL",
                          "JTS000000000000000TSL")) %>%
  left_join(jt.series, by = "series_id") %>%
  left_join(jt.dataelement, by = "dataelement_code") %>%
  month_to_date %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = "")) +
  xlab("") + ylab("Monthly Levels ('000s)")

Limits

Code
jt.data.1.AllItems %>%
  filter(series_id %in% c("JTS000000000000000HIL",
                          "JTS000000000000000TSL")) %>%
  left_join(jt.series, by = "series_id") %>%
  left_join(jt.dataelement, by = "dataelement_code") %>%
  month_to_date %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = ""),
                     limits = c(3000, 9000)) +
  xlab("") + ylab("Monthly Levels ('000s)")

Monthly Hires, quits, Openings

All

Code
jt.data.1.AllItems %>%
  filter(series_id %in% c("JTS000000000000000HIL",
                          "JTS000000000000000JOL",
                          "JTS000000000000000QUL")) %>%
  left_join(jt.series, by = "series_id") %>%
  left_join(jt.dataelement, by = "dataelement_code") %>%
  month_to_date %>%
  ggplot(.) + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = "")) +
  xlab("") + ylab("Monthly Levels ('000s) - Source: JOLTS")