2  Establishments

2.1 Introduction

The County Business Patterns data uses the general term establishment to refer to corporations, partnerships, non-profit organizations, etc.

The CBP data includes establishments categorized by employee size class. The range is embedded in the name. For example, n1_4 includes a count of establishments with 1-4 employees. The category n1000 includes establishments with 1,000 or more employees.

The plots below that reference sectors use the sector abbreviations listed in Section 1.6.


2.2 Number of establishments in NC

As one might expect, there are many more establishments with a small number of employees. Each subsequent employee size class includes fewer establishments. Compare the number of workers in each employee size class in Figure 1.3.

Show the code
p1 <- d_est_state_nc_total_size_classes |> 
  filter(year == 2021) |>
  ggplot() +
  geom_col(aes(x = value, y = est_size_class),
           fill = carolina_blue, alpha = 0.6) + 
  scale_x_continuous(labels = label_number(scale_cut = cut_short_scale())) +
  scale_y_discrete(limits=rev) +
  labs(
    x = "Establishments",
    y = "Employee size class",
    color = NULL,
  )

p2 <- d_est_state_nc_total_size_classes |> 
  mutate(est_size_class = as.character(est_size_class)) |>
  filter(year == 2021) |>
  inner_join(n_employees_ref,
             by = "est_size_class") |> 
  mutate(est_size_class = fct_reorder(est_size_class, pct_est)) |>
  arrange(desc(est_size_class)) |>
  mutate(cum_pct = cumsum(pct_est),
         ybar_start = lag(cum_pct, default = 0)) |>
  ggplot() +
  geom_segment(aes(x = est_size_class, xend = est_size_class, y = ybar_start, yend = cum_pct),
           color = carolina_blue, linewidth = 8, alpha = 0.6) + 
  scale_y_continuous(labels = label_percent()) +
  scale_x_discrete(limits=rev) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  labs(
    x = "Employee size class",
    y = "Percent of establishments",
    color = NULL,
  )

p1 + p2 +
  plot_annotation(
    title = "NC establishments in each employee size class",
    subtitle = "2021; includes all sectors reported in CBP",
    caption = my_caption
  )

Figure 2.1: NC establishments 2021


NC’s distribution of establishments is quite similar to the USA as a whole:

Show the code
nc_naics_abbr_levels <- d_est_sector_total_state_nc |>
  filter(year == 2021) |>
  arrange(pct_est) |>
  pull(naics_abbr)

data_for_plot <- d_est_sector_total_state_nc |>
  filter(year == 2021) |>
  mutate(scope = "nc") |>
  bind_rows(d_est_sector_total_usa |>
              filter(year == 2021) |>
              mutate(scope = "usa")
  ) |>
  select(-c(naics_abbr_num)) |>
  mutate(naics_abbr = factor(naics_abbr, levels = nc_naics_abbr_levels)) |>
  mutate(low_value = min(pct_est),
         high_value = max(pct_est),
         .by = naics_abbr) |>
  mutate(diff_pct = high_value - low_value,
         diff_pct = if_else(pct_est == high_value, diff_pct, -1 * diff_pct)) 

diff_pct_cutoff <- 0.005

data_for_plot |>
  ggplot() +
  geom_segment(aes(x = low_value, xend = high_value, y = naics_abbr, yend = naics_abbr),
               alpha = 0.3) +
  geom_point(aes(x = pct_est, y = naics_abbr, color = scope),
           alpha = 0.6) + 
  geom_point(aes(x = pct_est, y = naics_abbr, color = scope),
           alpha = 0.6) + 
  geom_text(aes(x = high_value, y = naics_abbr,
                label = if_else(diff_pct > diff_pct_cutoff,
                                percent(pct_est, accuracy = .1),
                                NA_character_)),
            na.rm = TRUE, size = 3,
            hjust = 0, nudge_x = 0.003) +
  geom_text(aes(x = low_value, y = naics_abbr,
                label = if_else(diff_pct < -1 * diff_pct_cutoff,
                                percent(pct_est, accuracy = .1),
                                NA_character_)),
            na.rm = TRUE, size = 3,
            hjust = 1, nudge_x = -0.003) +
  scale_x_continuous(labels = label_percent()) +
  scale_color_manual(values = c(carolina_blue, "firebrick")) +
  theme(legend.position = c(0.8, 0.4),
        legend.box.background = element_rect(fill = "grey80")) +
  labs(
    title = "NC establishments by sector\ncompared to USA 2021",
    subtitle = glue("Includes all 100 counties and 'Statewide'", 
                    "; showing percentages where difference is > {percent(diff_pct_cutoff, accuracy = 0.1)}"),
    x = "Establishements",
    y = "",
    color = NULL,
    caption = my_caption
  )

Figure 2.2: NC establishments by sector compared to USA 2021


2.4 Table

Sorted by percent difference in number of 2001 to 2021.

Show the code
d_est_sector_total_state_nc |>
  filter(naics_abbr != "OtherInd") |>
  mutate(naics_abbr = fct_reorder(naics_abbr, -est)
         ) |>
  mutate(est_fist_year = est[year == min(year)],
         est_last_year = est[year == max(year)],
         .by = c("naics")) |>
  mutate(pct_est_diff = est_last_year / est_fist_year - 1) |>
  filter(year == 2021) |>
  select(naics, naics_abbr, est_2021 = est, pct_est_2021 = pct_est, pct_est_diff_since_2001 = pct_est_diff) |>
  arrange(-pct_est_diff_since_2001) |>
  mutate(rowid = row_number()) |>
  gt() |>
  tab_header(md(glue("**NC sector establishments in 2021 and growth since 2001**",
                     "<br>*Sorted by growth since 2001*"))) |>
  tab_source_note(md("*US Census County Business Patterns; analysis by Daniel Moul*")) |>
  tab_options(table.font.size = 10) |>
  fmt_number(columns = c(est_2021),
             decimals = 0) |>
  fmt_percent(columns = c(pct_est_2021, pct_est_diff_since_2001),
             decimals = 0)
Table 2.1: NC state establishments by sector 2021
NC sector establishments in 2021 and growth since 2001
Sorted by growth since 2001
naics naics_abbr est_2021 pct_est_2021 pct_est_diff_since_2001 rowid
61---- Educ 3,269 1% 91% 1
53---- RealEst 14,743 6% 83% 2
22---- Util 648 0% 56% 3
62---- HealthSoc 25,876 10% 54% 4
72---- AccFood 22,625 9% 49% 5
55---- Mgmt 1,750 1% 48% 6
54---- ProfSciTec 26,689 11% 47% 7
71---- ArtEntRec 4,228 2% 46% 8
48---- Transpt 7,661 3% 44% 9
56---- AdminWaste 14,564 6% 38% 10
51---- Info 4,131 2% 32% 11
81---- OtherServ 25,178 10% 18% 12
52---- FinIns 13,539 5% 17% 13
23---- Constr 26,522 11% 5% 14
21---- MineOilGas 198 0% −2% 15
44---- Retail 34,963 14% −3% 16
42---- Whlsale 11,266 5% −8% 17
31---- Manuf 8,537 3% −21% 18
11---- AgForFish 793 0% −23% 19
US Census County Business Patterns; analysis by Daniel Moul



  1. https://home.treasury.gov/policy-issues/coronavirus/assistance-for-small-businesses ↩︎

  2. https://www.ncdor.gov/business-recovery-grant ↩︎