1860 Utah Had Fewer Skilled and Educated Workers than Almost Any Other State/Territory in the US

TLDR: The occasional art missionary to Europe or groundbreaking female doctor notwithstanding, a few years after the “Utah War” we were still pretty much a people of farmers and day-laborers with hardly any middle-class or educated professions.

It’s hard to compare the relative economies of different states and territories in the 19th century, because the relevant income questions weren’t asked until the 20th century. However, one way we can kind of get at this is what is called the Duncan SEI Index, a measure from 1 to 100 which measures the relative prestige and income of different careers. Of course there are issues with using this,* but it’s the worst measure of occupational prestige in the 1860 census except all the other measures (as far as I know). So I ran the averages by state, and interestingly, if we look at all adults over the age of 18, Utah is…third to last (SEI score of 6/100), beaten out by Colorado and New Mexico (both 5/100). This isn’t super surprising since we’re all frontier locations. The highest is Oklahoma (19), so there’s clearly something weird going on with who they’re surveying in Indian Territory at that point, but the next highest is Washington, DC (13), which makes sense.

Of course, see caveat in asterisk about indigenous people and slaves, but still, this is evidence that, the occasional art missionary to Europe or groundbreaking female doctor notwithstanding, a few years after the “Utah War” we were still pretty much a people of farmers and day-laborers with hardly any middle-class or educated professions.


  • Specifically,

1)  The score assignment is based on the prestige of these careers in the 1950s which were then back-applied to the 1860s. So while, say, the prestige and income of a farmer relative to a lawyer has probably shifted somewhat from 1860 to 1950, the order of magnitude is approximately correct, with the doctors, lawyers, and merchants in the higher classes and the farmers and laborers in the lower classes.

2) There has been a metric ton of ink spilled on different SEI index measures and how much they work. This literature isn’t my thing (if you think you’re a heretic because of your political opinions at Church, try being a sociology PhD who doesn’t care about inequality research), so I’m just going to appeal to authority with this measure since it’s the most well-known one.

3) I don’t know how this interacts with the indigenous, slaves, and others in (and out of) the census that were certainly not “missing at random” as they say in the data world. As noted, I don’t know why Oklahoma is such an outlier, and there’s clearly something fishy with who the census talked to there.

Code

if (!require(“ipumsr”)) stop(“Reading IPUMS data into R requires the ipumsr package. It can be installed using the following command: install.packages(‘ipumsr’)”)

library(dplyr)
library(tigris)
library(sf)
library(ggplot2)

options(tigris_class = “sf”, tigris_use_cache = TRUE)

 

setwd(“LOCATION”)

ddi <- read_ipums_ddi(“usa_00032.xml”)
data <- read_ipums_micro(ddi)

 

data <- subset(data, AGE > 17)

 

state_means <- data %>%
group_by(STATEFIP) %>%
summarise(
mean_sei = mean(SEI, na.rm = TRUE),
.groups = “drop”
) %>%
mutate(
GEOID = sprintf(“%02d”, as.integer(STATEFIP))
)

state_lookup <- states(cb = TRUE) %>%
st_drop_geometry() %>% # strip geometry, keep attributes
select(GEOID, STUSPS, NAME)

state_means_named <- state_means %>%
left_join(state_lookup, by = “GEOID”) %>%
select(STATEFIP, GEOID, STUSPS, NAME, mean_sei) %>%
arrange(STUSPS)

 

states_sf <- states(cb = TRUE) %>%

filter(!STUSPS %in% c(“AK”, “HI”, “PR”, “VI”, “GU”, “MP”, “AS”)) %>%
left_join(
state_means %>% select(GEOID, mean_sei),
by = “GEOID”
)

 

ggplot(states_sf) +
geom_sf(aes(fill = mean_sei), color = NA) +
scale_fill_viridis_c(name = “Mean SEI”, na.value = “grey90”) +
coord_sf(crs = 5070) +
theme_void() +
labs(
title = “Average Duncan SEI Score by State”,
subtitle = “Computed from 1860 IPUMS Census Data”
)

 

df <- subset(data, STATEFIP == 49)
mean(df$SEI, na.rm = TRUE)

df <- subset(data, STATEFIP == 4)
mean(df$SEI, na.rm = TRUE)

 


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.