Last observation: 2026 (N = 198428)
First observation: 1940 (N = 10)
Last data update: 23 sept. 2026, 23:35
Last compile: 23 sept. 2026, 23:41
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 | 8688984 |
| 3 | Enrolled in School | 163817 |
| 4 | Enrolled in High School | 32708 |
| 5 | Enrolled in College | 32771 |
| 6 | Enrolled in College Full-time | 32732 |
| 7 | Enrolled in College Part-time | 32396 |
| 8 | Not Enrolled | 308715 |
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 | 9208417 |
| 1 | Native born | 41853 |
| 2 | Foreign born | 41853 |
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 | 8486629 |
| 1 | Wage and salary workers | 230887 |
| 2 | Private wage and salary workers | 251871 |
| 3 | Government wage and salary workers | 80899 |
| 4 | Federal wage and salary workers | 6520 |
| 5 | State wage and salary workers | 5120 |
| 6 | Local wage and salary workers | 5120 |
| 8 | Self-employed workers, unincorporated | 110343 |
| 9 | Unpaid family workers | 87212 |
| 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) | 4215 |
| 14 | Incorporated self-employed | 3631 |
| 16 | Wage and salary workers, excluding incorporated self employed | 7987 |
| 17 | Private wage and salary workers, excluding incorporated self employed | 5971 |
| 20 | Self-employed workers (both incorporated and unincorporated) | 2275 |
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 | 8777877 |
| 6 | Less than 5 weeks | 103056 |
| 18 | 15 weeks and over | 104160 |
| 31 | 27 weeks and over | 78737 |
| 58 | 52 weeks and over | 29230 |
| 105 | 99 weeks and over | 7216 |
| 106 | 5 to 10 weeks | 2988 |
| 107 | 5 to 14 weeks | 78455 |
| 108 | 11 to 14 weeks | 2972 |
| 109 | 15 to 26 weeks | 78290 |
| 110 | 27 to 51 weeks | 29142 |
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 | 8892394 |
| 11 | Less than a High School diploma | 71098 |
| 19 | High School graduates, no college | 71126 |
| 20 | Some college or associate degree | 70394 |
| 21 | Some college, no degree | 25541 |
| 25 | Associate degree | 25539 |
| 40 | Bachelor's degree and higher | 83561 |
| 41 | Bachelor's degree only | 25023 |
| 45 | Advanced degree | 26943 |
| 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 | 8899454 |
| 1 | 1 to 34 hours | 219715 |
| 2 | 1 to 4 hours | 8035 |
| 6 | 5 to 14 hours | 8035 |
| 10 | 15 to 29 hours | 7288 |
| 14 | 30 to 34 hours | 8782 |
| 16 | 35 hours and over | 99321 |
| 17 | 35 to 39 hours | 7288 |
| 20 | 40 hours | 7288 |
| 21 | 41 hours and over | 5053 |
| 23 | 41 to 48 hours | 7288 |
| 27 | 49 to 59 hours | 7288 |
| 29 | 60 hours and over | 7288 |
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 | 8268502 |
| 1 | Hispanic or Latino | 827346 |
| 2 | Mexican | 43868 |
| 6 | Puerto Rican | 42709 |
| 7 | Cuban | 42188 |
| 10 | Non-Hispanic | 32886 |
| 15 | Central or South American | 5136 |
| 20 | Central American | 5136 |
| 21 | Salvadoran | 1904 |
| 25 | Other Central American (excludes Salvadoran) | 5136 |
| 30 | South American | 5136 |
| 40 | Other Hispanic or Latino | 5136 |
| 41 | Dominican | 1904 |
| 45 | Other Hispanic or Latino (excludes Dominican) | 5136 |
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 | 6217381 |
| 1 | White | 1357077 |
| 3 | Black or African American | 1108531 |
| 4 | Asian | 585146 |
| 5 | American Indian or Alaska Native | 4002 |
| 6 | Native Hawaiian or Other Pacific Islander | 3594 |
| 7 | Two or more races | 3456 |
| 10 | Asian - Asian Indian | 1848 |
| 15 | Asian - Chinese | 1848 |
| 25 | Asian - Filipino | 1848 |
| 26 | Asian - Japanese | 1848 |
| 27 | Asian - Korean | 1848 |
| 28 | Asian - Vietnamese | 1848 |
| 30 | Asian - Other Asian | 1848 |
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 | 600043 |
| U | Not Seasonally Adjusted | 8692080 |
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 | 4376503 |
| 1 | Men | 2471830 |
| 2 | Women | 2443790 |
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 | 8688707 |
| 1 | Veteran | 157848 |
| 3 | Vietnam era and earlier wartime periods | 43502 |
| 9 | Gulf War Era | 70491 |
| 12 | Veterans who served in Gulf War Era 2 (whether or not they served in Era 1) | 64125 |
| 13 | Veterans who served in Gulf War Era 1 but not Gulf War Era 2 | 56679 |
| 16 | Other Service Periods (may include peacetime) | 53352 |
| 25 | Nonveteran | 157419 |
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 = ""))