Labor Force Statistics including the National Unemployment Rate - LN
Data - BLS
Info
Data on employment
source | dataset | .html | .RData |
---|---|---|---|
2024-05-01 | NA | ||
2024-06-19 | NA | ||
2024-06-17 | NA | ||
2024-06-18 | 2024-06-18 | ||
2024-06-18 | 2024-06-18 | ||
2024-06-19 | 2024-06-08 | ||
2024-06-19 | 2024-06-08 | ||
2024-04-16 | 2024-05-12 | ||
2024-04-16 | 2023-12-10 | ||
2024-06-19 | 2024-04-15 | ||
2024-06-18 | 2024-05-06 |
LAST_DOWNLOAD
LAST_DOWNLOAD |
---|
2024-03-20 |
LAST_COMPILE
LAST_COMPILE |
---|
2024-06-20 |
Last
date | Nobs |
---|---|
2024-02-01 | 15441 |
ln.activity
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.activity, by = "activity_code") %>%
group_by(activity_code, activity_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
activity_code | activity_text | Nobs |
---|---|---|
0 | N/A | 7717633 |
3 | Enrolled in School | 153317 |
4 | Enrolled in High School | 30608 |
5 | Enrolled in College | 30671 |
6 | Enrolled in College Full-time | 30632 |
7 | Enrolled in College Part-time | 30296 |
8 | Not Enrolled | 288849 |
ln.ages
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.ages, by = "ages_code") %>%
group_by(ages_code, ages_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
ln.born
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.born, by = "born_code") %>%
group_by(born_code, born_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
born_code | born_text | Nobs |
---|---|---|
0 | N/A | 8212926 |
1 | Native born | 34540 |
2 | Foreign born | 34540 |
ln.class
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.class, by = "class_code") %>%
group_by(class_code, class_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
class_code | class_text | Nobs |
---|---|---|
0 | N/A | 7563567 |
1 | Wage and salary workers | 212313 |
2 | Private wage and salary workers | 228669 |
3 | Government wage and salary workers | 72710 |
4 | Federal wage and salary workers | 2467 |
5 | State wage and salary workers | 2507 |
6 | Local wage and salary workers | 2507 |
8 | Self-employed workers, unincorporated | 100662 |
9 | Unpaid family workers | 79862 |
11 | Nonagriculture government, self employed, and unpaid family worker (3, 8, and 9 above) | 3443 |
12 | Self-employed unincorporated, and unpaid family workers (8 and 9) | 3837 |
14 | Incorporated self-employed | 1230 |
16 | Wage and salary workers, excluding incorporated self employed | 4998 |
17 | Private wage and salary workers, excluding incorporated self employed | 3234 |
ln.duration
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.duration, by = "duration_code") %>%
group_by(duration_code, duration_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
duration_code | duration_text | Nobs |
---|---|---|
0 | N/A | 7800136 |
6 | Less than 5 weeks | 96766 |
18 | 15 weeks and over | 97800 |
31 | 27 weeks and over | 73731 |
58 | 52 weeks and over | 27592 |
105 | 99 weeks and over | 5956 |
106 | 5 to 10 weeks | 2820 |
107 | 5 to 14 weeks | 73531 |
108 | 11 to 14 weeks | 2804 |
109 | 15 to 26 weeks | 73366 |
110 | 27 to 51 weeks | 27504 |
ln.education
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.education, by = "education_code") %>%
group_by(education_code, education_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
education_code | education_text | Nobs |
---|---|---|
0 | All educational levels | 7933089 |
11 | Less than a High School diploma | 63525 |
19 | High School graduates, no college | 63553 |
20 | Some college or associate degree | 62933 |
21 | Some college, no degree | 23391 |
25 | Associate degree | 23389 |
40 | Bachelor's degree and higher | 75190 |
41 | Bachelor's degree only | 17508 |
45 | Advanced degree | 19428 |
ln.lfst
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.lfst, by = "lfst_code") %>%
group_by(lfst_code, lfst_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
ln.hour
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.hour, by = "hour_code") %>%
group_by(hour_code, hour_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
hour_code | hour_text | Nobs |
---|---|---|
0 | N/A | 7918253 |
1 | 1 to 34 hours | 203057 |
2 | 1 to 4 hours | 7585 |
6 | 5 to 14 hours | 7585 |
10 | 15 to 29 hours | 6880 |
14 | 30 to 34 hours | 8290 |
16 | 35 hours and over | 91191 |
17 | 35 to 39 hours | 6880 |
20 | 40 hours | 6880 |
21 | 41 hours and over | 4765 |
23 | 41 to 48 hours | 6880 |
27 | 49 to 59 hours | 6880 |
29 | 60 hours and over | 6880 |
ln.indy
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.indy, by = "indy_code") %>%
group_by(indy_code, indy_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
ln.occupation
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.occupation, by = "occupation_code") %>%
group_by(occupation_code, occupation_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
ln.orig
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.orig, by = "orig_code") %>%
group_by(orig_code, orig_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
orig_code | orig_text | Nobs |
---|---|---|
0 | All Origins | 7359517 |
1 | Hispanic or Latino | 751580 |
2 | Mexican | 39626 |
6 | Puerto Rican | 38467 |
7 | Cuban | 37988 |
10 | Non-Hispanic | 26988 |
15 | Central or South American | 4128 |
20 | Central American | 4128 |
21 | Salvadoran | 1536 |
25 | Other Central American (excludes Salvadoran) | 4128 |
30 | South American | 4128 |
40 | Other Hispanic or Latino | 4128 |
41 | Dominican | 1536 |
45 | Other Hispanic or Latino (excludes Dominican) | 4128 |
ln.race
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.race, by = "race_code") %>%
group_by(race_code, race_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
race_code | race_text | Nobs |
---|---|---|
0 | All Races | 5465957 |
1 | White | 1260884 |
3 | Black or African American | 1021614 |
4 | Asian | 513019 |
5 | American Indian or Alaska Native | 3634 |
6 | Native Hawaiian or Other Pacific Islander | 3226 |
7 | Two or more races | 3088 |
10 | Asian Indian | 1512 |
15 | Chinese | 1512 |
25 | Filipino | 1512 |
26 | Japanese | 1512 |
27 | Korean | 1512 |
28 | Vietnamese | 1512 |
30 | Other Asian | 1512 |
ln.seasonal
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
rename(seasonal_code = seasonal) %>%
left_join(ln.seasonal, by = "seasonal_code") %>%
group_by(seasonal_code, seasonal_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
seasonal_code | seasonal_text | Nobs |
---|---|---|
S | Seasonally Adjusted | 574823 |
U | Not Seasonally Adjusted | 7707183 |
ln.sexs
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.sexs, by = "sexs_code") %>%
group_by(sexs_code, sexs_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
sexs_code | sexs_text | Nobs |
---|---|---|
0 | Both Sexes | 3782356 |
1 | Men | 2263911 |
2 | Women | 2235739 |
ln.vets
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
left_join(ln.vets, by = "vets_code") %>%
group_by(vets_code, vets_text) %>%
summarise(Nobs = n()) %>%
print_table_conditional
vets_code | vets_text | Nobs |
---|---|---|
0 | N/A | 7751069 |
1 | Veteran | 139888 |
3 | World War II or Korean War or Vietnam Era | 37886 |
9 | Gulf War Era | 61863 |
12 | Veterans who served in Gulf War Era 2 (whether or not they served in Era 1) | 55500 |
13 | Veterans who served in Gulf War Era 1 but not Gulf War Era 2 | 49136 |
16 | Other Service Periods (may include peacetime) | 47163 |
25 | Nonveteran | 139501 |
Longest Series
Code
%>%
ln.series arrange(begin_year) %>%
head(100) %>%
select(series_id, series_title, begin_year, end_year) %>%
if (is_html_output()) datatable(., filter = 'top', rownames = F) else .} {
Employment / Population Ratio
All Series - lfst_code = 23
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
filter(lfst_code == 23) %>%
group_by(series_id, series_title) %>%
summarise(Nobs = n()) %>%
print_table_conditional
Men, Women, All
All
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300000", "LNS12300002")) %>%
left_join(ln.sexs, by = "sexs_code") %>%
filter(lfst_code == 23,
== 0,
orig_code == 0,
born_code == 0,
mari_code == 0,
race_code == "S",
seasonal == 0,
ages_code == 0,
activity_code == 0) %>%
duration_code month_to_date() %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") +
ylab("Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100, color = sexs_text)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("1947-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
scale_x_date(breaks = seq(1910, 2100, 5) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 10), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = "")) +
scale_color_manual(values = c("black", "darkblue", "purple")) +
theme(legend.position = c(0.8, 0.2),
legend.title = element_blank())
1980-
Code
1.AllData %>%
ln.data.left_join(ln.series, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300000", "LNS12300002")) %>%
left_join(ln.sexs, by = "sexs_code") %>%
filter(lfst_code == 23,
== 0,
orig_code == 0,
born_code == 0,
mari_code == 0,
race_code == "S",
seasonal == 0,
ages_code == 0,
activity_code == 0) %>%
duration_code month_to_date() %>%
arrange(desc(date)) %>%
filter(date >= as.Date("1980-01-01")) %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") +
ylab("Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100, color = sexs_text)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("1980-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
scale_x_date(breaks = seq(1910, 2100, 5) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 5), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = "")) +
scale_color_manual(values = c("black", "darkblue", "purple")) +
theme(legend.position = c(0.8, 0.2),
legend.title = element_blank())
Veterans, Non Veterans
Code
%>%
ln.series filter(lfst_code == 23,
== 1,
sexs_code == 0,
race_code == "U",
seasonal == 28,
ages_code == 0,
orig_code == 0,
born_code == 0,
education_code == "M") %>%
periodicity_code left_join(ln.data.1.AllData, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300049", "LNS12300061")) %>%
left_join(ln.vets, by = "vets_code") %>%
month_to_date() %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Men Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100, color = vets_text)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("1947-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
theme(legend.position = c(0.2, 0.2),
legend.title = element_blank()) +
scale_x_date(breaks = seq(1910, 2100, 5) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 5), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = ""))
By age, Men
Seasonal
All
Code
%>%
ln.series filter(lfst_code == 23,
== 1,
sexs_code == 0,
race_code == 0,
mari_code == "S",
seasonal %in% c(0, 28, 33, 22),
ages_code == "M") %>%
periodicity_code left_join(ln.data.1.AllData, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300049", "LNS12300061")) %>%
left_join(ln.ages, by = "ages_code") %>%
month_to_date() %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Men Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100, color = ages_text)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("1947-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
theme(legend.position = c(0.2, 0.2),
legend.title = element_blank()) +
scale_x_date(breaks = seq(1910, 2100, 5) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 5), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = ""))
1980-
Code
%>%
ln.series filter(lfst_code == 23,
== 1,
sexs_code == 0,
race_code == 0,
mari_code == "S",
seasonal %in% c(0, 28, 33, 22),
ages_code == "M") %>%
periodicity_code left_join(ln.data.1.AllData, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300049", "LNS12300061")) %>%
left_join(ln.ages, by = "ages_code") %>%
month_to_date() %>%
filter(date >= as.Date("1980-01-01")) %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Men Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100, color = ages_text)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("1980-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
theme(legend.position = c(0.2, 0.2),
legend.title = element_blank()) +
scale_x_date(breaks = seq(1910, 2100, 5) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 5), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = ""))
Seasonal
Code
%>%
ln.series filter(lfst_code == 23,
== 1,
sexs_code == 0,
race_code == "S",
seasonal %in% c(33),
ages_code == "M") %>%
periodicity_code left_join(ln.data.1.AllData, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300049", "LNS12300061")) %>%
left_join(ln.ages, by = "ages_code") %>%
month_to_date() %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("25-54 Men Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("1947-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
theme(legend.position = c(0.2, 0.2),
legend.title = element_blank()) +
scale_x_date(breaks = seq(1910, 2100, 5) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 5), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = ""))
Unseasonal
Code
%>%
ln.series filter(lfst_code == 23,
== 1,
sexs_code == 0,
race_code == "U",
seasonal %in% c(0, 28, 33),
ages_code == 0,
orig_code == 0,
mari_code == 0,
born_code == 0,
vets_code == 0,
education_code == "M") %>%
periodicity_code left_join(ln.data.1.AllData, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300049", "LNS12300061")) %>%
left_join(ln.ages, by = "ages_code") %>%
month_to_date() %>%
arrange(desc(date)) %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Men Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100, color = ages_text)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("1947-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
theme(legend.position = c(0.2, 0.2),
legend.title = element_blank()) +
scale_x_date(breaks = seq(1910, 2100, 5) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 5), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = ""))
Men, Women
1994-
Code
%>%
ln.series filter(lfst_code == 23,
== 0,
race_code == "S",
seasonal %in% c(33),
ages_code == "M") %>%
periodicity_code left_join(ln.data.1.AllData, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300049", "LNS12300061")) %>%
left_join(ln.sexs, by = "sexs_code") %>%
month_to_date() %>%
filter(date >= as.Date("1994-01-01")) %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("25-54 Men Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100, color = sexs_text)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("1994-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
scale_color_manual(values = c("black", "darkblue", "purple")) +
theme(legend.position = c(0.8, 0.2),
legend.title = element_blank()) +
scale_x_date(breaks = seq(1910, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 5), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = ""))
All
Code
%>%
ln.series filter(lfst_code == 23,
== 0,
race_code == "S",
seasonal %in% c(33),
ages_code == "M") %>%
periodicity_code left_join(ln.data.1.AllData, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300049", "LNS12300061")) %>%
left_join(ln.sexs, by = "sexs_code") %>%
month_to_date() %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("25-54 Men Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100, color = sexs_text)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("1947-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
scale_color_manual(values = c("black", "darkblue", "purple")) +
theme(legend.position = c(0.8, 0.2),
legend.title = element_blank()) +
scale_x_date(breaks = seq(1910, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 5), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = ""))
2009-
Code
%>%
ln.series filter(lfst_code == 23,
== 0,
race_code == "S",
seasonal %in% c(33),
ages_code == "M") %>%
periodicity_code left_join(ln.data.1.AllData, by = "series_id") %>%
#filter(series_id %in% c("LNS12300001", "LNS12300049", "LNS12300061")) %>%
left_join(ln.sexs, by = "sexs_code") %>%
month_to_date() %>%
filter(date >= as.Date("2000-01-01")) %>%
mutate(value = as.numeric(value)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("25-54 Men Employment / Population Ratio") +
geom_line(aes(x = date, y = value/100, color = sexs_text)) +
geom_rect(data = nber_recessions %>%
filter(Trough >= as.Date("2000-01-01")),
aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf),
fill = 'grey', alpha = 0.5) +
scale_color_manual(values = c("black", "darkblue", "purple")) +
theme(legend.position = c(0.15, 0.2),
legend.title = element_blank()) +
scale_x_date(breaks = seq(1910, 2100, 5) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*c(seq(0, 100, 5), seq(100, 500, 50)),
labels = percent_format(accuracy = 1, prefix = ""))