Last observation: 2026 (N = 238133)
First observation: 1940 (N = 10)
Last data update: 09 oct. 2026, 23:54
Last compile: 10 oct. 2026, 00:02
ln.data.1.AllData |>
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 | 8727123 |
| 3 | Enrolled in School | 164317 |
| 4 | Enrolled in High School | 32808 |
| 5 | Enrolled in College | 32871 |
| 6 | Enrolled in College Full-time | 32832 |
| 7 | Enrolled in College Part-time | 32496 |
| 8 | Not Enrolled | 309661 |
ln.data.1.AllData |>
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.data.1.AllData |>
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 | 9247986 |
| 1 | Native born | 42061 |
| 2 | Foreign born | 42061 |
ln.data.1.AllData |>
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 | 8522986 |
| 1 | Wage and salary workers | 231767 |
| 2 | Private wage and salary workers | 252949 |
| 3 | Government wage and salary workers | 81247 |
| 4 | Federal wage and salary workers | 6608 |
| 5 | State wage and salary workers | 5202 |
| 6 | Local wage and salary workers | 5202 |
| 8 | Self-employed workers, unincorporated | 110761 |
| 9 | Unpaid family workers | 87560 |
| 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) | 4233 |
| 14 | Incorporated self-employed | 3707 |
| 16 | Wage and salary workers, excluding incorporated self employed | 8057 |
| 17 | Private wage and salary workers, excluding incorporated self employed | 6041 |
| 20 | Self-employed workers (both incorporated and unincorporated) | 2345 |
ln.data.1.AllData |>
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 | 8816317 |
| 6 | Less than 5 weeks | 103356 |
| 18 | 15 weeks and over | 104464 |
| 31 | 27 weeks and over | 78976 |
| 58 | 52 weeks and over | 29308 |
| 105 | 99 weeks and over | 7276 |
| 106 | 5 to 10 weeks | 2996 |
| 107 | 5 to 14 weeks | 78690 |
| 108 | 11 to 14 weeks | 2980 |
| 109 | 15 to 26 weeks | 78525 |
| 110 | 27 to 51 weeks | 29220 |
ln.data.1.AllData |>
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 | 8930373 |
| 11 | Less than a High School diploma | 71392 |
| 19 | High School graduates, no college | 71420 |
| 20 | Some college or associate degree | 70688 |
| 21 | Some college, no degree | 25627 |
| 25 | Associate degree | 25625 |
| 40 | Bachelor's degree and higher | 83893 |
| 41 | Bachelor's degree only | 25333 |
| 45 | Advanced degree | 27253 |
| 46 | Master's degree | 168 |
| 47 | Professional degree | 168 |
| 48 | Doctoral degree | 168 |
ln.data.1.AllData |>
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.data.1.AllData |>
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 | 8938078 |
| 1 | 1 to 34 hours | 220508 |
| 2 | 1 to 4 hours | 8055 |
| 6 | 5 to 14 hours | 8055 |
| 10 | 15 to 29 hours | 7306 |
| 14 | 30 to 34 hours | 8804 |
| 16 | 35 hours and over | 99707 |
| 17 | 35 to 39 hours | 7306 |
| 20 | 40 hours | 7306 |
| 21 | 41 hours and over | 5065 |
| 23 | 41 to 48 hours | 7306 |
| 27 | 49 to 59 hours | 7306 |
| 29 | 60 hours and over | 7306 |
ln.data.1.AllData |>
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.data.1.AllData |>
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.data.1.AllData |>
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 | 8304029 |
| 1 | Hispanic or Latino | 830616 |
| 2 | Mexican | 44070 |
| 6 | Puerto Rican | 42911 |
| 7 | Cuban | 42388 |
| 10 | Non-Hispanic | 33150 |
| 15 | Central or South American | 5184 |
| 20 | Central American | 5184 |
| 21 | Salvadoran | 1920 |
| 25 | Other Central American (excludes Salvadoran) | 5184 |
| 30 | South American | 5184 |
| 40 | Other Hispanic or Latino | 5184 |
| 41 | Dominican | 1920 |
| 45 | Other Hispanic or Latino (excludes Dominican) | 5184 |
ln.data.1.AllData |>
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 | 6246077 |
| 1 | White | 1361310 |
| 3 | Black or African American | 1112336 |
| 4 | Asian | 588237 |
| 5 | American Indian or Alaska Native | 4018 |
| 6 | Native Hawaiian or Other Pacific Islander | 3610 |
| 7 | Two or more races | 3472 |
| 10 | Asian - Asian Indian | 1864 |
| 15 | Asian - Chinese | 1864 |
| 25 | Asian - Filipino | 1864 |
| 26 | Asian - Japanese | 1864 |
| 27 | Asian - Korean | 1864 |
| 28 | Asian - Vietnamese | 1864 |
| 30 | Asian - Other Asian | 1864 |
ln.data.1.AllData |>
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 | 601281 |
| U | Not Seasonally Adjusted | 8730827 |
ln.data.1.AllData |>
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 | 4398421 |
| 1 | Men | 2480884 |
| 2 | Women | 2452803 |
ln.data.1.AllData |>
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 | 8725472 |
| 1 | Veteran | 158648 |
| 3 | Vietnam era and earlier wartime periods | 43754 |
| 9 | Gulf War Era | 70875 |
| 12 | Veterans who served in Gulf War Era 2 (whether or not they served in Era 1) | 64509 |
| 13 | Veterans who served in Gulf War Era 1 but not Gulf War Era 2 | 57013 |
| 16 | Other Service Periods (may include peacetime) | 53620 |
| 25 | Nonveteran | 158217 |
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 .}ln.data.1.AllData |>
left_join(ln.series, by = "series_id") |>
filter(lfst_code == 23) |>
group_by(series_id, series_title) |>
summarise(Nobs = n()) |>
print_table_conditional()ln.data.1.AllData |>
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,
orig_code == 0,
born_code == 0,
mari_code == 0,
race_code == 0,
seasonal == "S",
ages_code == 0,
activity_code == 0,
duration_code == 0) |>
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())
ln.data.1.AllData |>
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,
orig_code == 0,
born_code == 0,
mari_code == 0,
race_code == 0,
seasonal == "S",
ages_code == 0,
activity_code == 0,
duration_code == 0) |>
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())
ln.series |>
filter(lfst_code == 23,
sexs_code == 1,
race_code == 0,
seasonal == "U",
ages_code == 28,
orig_code == 0,
born_code == 0,
education_code == 0,
periodicity_code == "M") |>
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 = ""))
ln.series |>
filter(lfst_code == 23,
sexs_code == 1,
race_code == 0,
mari_code == 0,
seasonal == "S",
ages_code %in% c(0, 28, 33, 22),
periodicity_code == "M") |>
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 = ""))
ln.series |>
filter(lfst_code == 23,
sexs_code == 1,
race_code == 0,
mari_code == 0,
seasonal == "S",
ages_code %in% c(0, 28, 33, 22),
periodicity_code == "M") |>
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 = ""))
ln.series |>
filter(lfst_code == 23,
sexs_code == 1,
race_code == 0,
seasonal == "S",
ages_code %in% c(33),
periodicity_code == "M") |>
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 = ""))
ln.series |>
filter(lfst_code == 23,
sexs_code == 1,
race_code == 0,
seasonal == "U",
ages_code %in% c(0, 28, 33),
orig_code == 0,
mari_code == 0,
born_code == 0,
vets_code == 0,
education_code == 0,
periodicity_code == "M") |>
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 = ""))
ln.series |>
filter(lfst_code == 23,
race_code == 0,
seasonal == "S",
ages_code %in% c(33),
periodicity_code == "M") |>
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 = ""))
ln.series |>
filter(lfst_code == 23,
race_code == 0,
seasonal == "S",
ages_code %in% c(33),
periodicity_code == "M") |>
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 = ""))
ln.series |>
filter(lfst_code == 23,
race_code == 0,
seasonal == "S",
ages_code %in% c(33),
periodicity_code == "M") |>
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 = ""))