Skip to contents

Translates ISCO08/ISCO88 codes to OEP, a hierarchical indicator of occupations' earning potential. OEP is a numeric scale that measures occupations' median earnings and expresses them as percentiles of the overall earnings structure.

Usage

isco08_to_oep(x, to_factor = FALSE)

isco88_to_oep(x, to_factor = FALSE)

Arguments

x

A character vector of 4-digit ISCO08/ISCO88 codes

to_factor

A logical value indicating whether to return a factor instead of a character

Value

A character vector with OEP values

Details

This function translates ISCO08/ISCO88 codes (at 1-, 2-, 3-, 4-digit) to OEP, a hierarchical indicator of occupations’ earning potential. OEP is a numeric scale that measures occupations’ median earnings and expresses them as percentiles of the overall earnings structure.

As it does not have any labels, the label argument is not available in this function. For more information on this scale, please refer to:

  • Oesch, D., Lipps, O., Shahbazian, R., Bihagen, E. and Morris, K., (2024) Occupational earning potential: A new measure of social hierarchy applied to Europe, JRC Labour, Education and Technology working paper series 2024/06, European Commission, Seville, JRC139883. https://joint-research-centre.ec.europa.eu/scientific-activities-z/employment/jrc-labour-education-and-technology-working-paper-series_en

  • Oesch, D., Lipps, O., Shahbazian, R., Bihagen, E. (2025) Occupational Earning Potential (OEP) Scale (2025-03-11 update). OSF, doi: https://doi.org/10.17605/OSF.IO/PR89U

This function expects 4-digit ISCO codes. For different digit levels (1-3), first convert using isco08_swap() or isco88_swap(). For example:

# For 3-digit ISCO:
df$isco08_3d <- isco08_swap(df$isco08, from = 4, to = 3)
df$oep <- isco08_to_oep(df$isco08_3d)

UPDATE: As of 17th of June, 2025, we have fixed the following mistakes that were occuring:

(1) Military ISCO-codes were inconsistent with the ISCO-logic (because they consist in 2-digit codes at the 3-digit level and in 3-digit codes at the 4-digit level of ISCO).

(2) Higher ISCOs codes were not filled with the codes of lower ISCO-levels (say: ISCO-1 code 6 becomes ISCO-2 code 60, becomes ISCO-3 code 600, becomes ISCO-4 code 6000).

The translation now fixes both issues and works fine.

Examples

library(dplyr)

## ISCO08
# Using 4-digit ISCO (default)
ess %>%
  transmute(
    isco08,
    oep = isco08_to_oep(isco08)
  )
#> # A tibble: 48,285 × 2
#>    isco08 oep  
#>    <chr>  <chr>
#>  1 5414   28   
#>  2 1321   77   
#>  3 3135   57   
#>  4 7131   35   
#>  5 6111   27   
#>  6 6111   27   
#>  7 9313   32   
#>  8 1311   70   
#>  9 1311   70   
#> 10 6111   27   
#> # ℹ 48,275 more rows

# Using 3-digit ISCO
ess %>%
  transmute(
    isco08,
    isco08_3d = isco08_swap(isco08, from = 4, to = 3),
    oep = isco08_to_oep(isco08_3d)
  )
#> # A tibble: 48,285 × 3
#>    isco08 isco08_3d oep  
#>    <chr>  <chr>     <chr>
#>  1 5414   5410      50   
#>  2 1321   1320      77   
#>  3 3135   3130      56   
#>  4 7131   7130      33   
#>  5 6111   6110      27   
#>  6 6111   6110      27   
#>  7 9313   9310      34   
#>  8 1311   1310      70   
#>  9 1311   1310      70   
#> 10 6111   6110      27   
#> # ℹ 48,275 more rows

# Using 2-digit ISCO
ess %>%
  transmute(
    isco08,
    isco08_2d = isco08_swap(isco08, from = 4, to = 2),
    oep = isco08_to_oep(isco08_2d)
  )
#> # A tibble: 48,285 × 3
#>    isco08 isco08_2d oep  
#>    <chr>  <chr>     <chr>
#>  1 5414   5400      50   
#>  2 1321   1300      79   
#>  3 3135   3100      63   
#>  4 7131   7100      40   
#>  5 6111   6100      26   
#>  6 6111   6100      26   
#>  7 9313   9300      26   
#>  8 1311   1300      79   
#>  9 1311   1300      79   
#> 10 6111   6100      26   
#> # ℹ 48,275 more rows

# Using 1-digit ISCO
ess %>%
  transmute(
    isco08,
    isco08_1d = isco08_swap(isco08, from = 4, to = 1),
    oep = isco08_to_oep(isco08_1d)
  )
#> # A tibble: 48,285 × 3
#>    isco08 isco08_1d oep  
#>    <chr>  <chr>     <chr>
#>  1 5414   5000      23   
#>  2 1321   1000      81   
#>  3 3135   3000      55   
#>  4 7131   7000      43   
#>  5 6111   6000      22   
#>  6 6111   6000      22   
#>  7 9313   9000      19   
#>  8 1311   1000      81   
#>  9 1311   1000      81   
#> 10 6111   6000      22   
#> # ℹ 48,275 more rows

## ISCO88
# Using 4-digit ISCO (default)
ess %>%
  transmute(
    isco88,
    oep = isco88_to_oep(isco88)
  )
#> # A tibble: 48,285 × 2
#>    isco88 oep  
#>    <chr>  <chr>
#>  1 5169   38   
#>  2 1222   76   
#>  3 8120   46   
#>  4 7141   35   
#>  5 6111   27   
#>  6 6111   27   
#>  7 9313   32   
#>  8 1221   70   
#>  9 1221   70   
#> 10 6111   27   
#> # ℹ 48,275 more rows

# Using 3-digit ISCO
ess %>%
  transmute(
    isco88,
    isco88_3d = isco88_swap(isco88, from = 4, to = 3),
    oep = isco88_to_oep(isco88_3d)
  )
#> # A tibble: 48,285 × 3
#>    isco88 isco88_3d oep  
#>    <chr>  <chr>     <chr>
#>  1 5169   5160      53   
#>  2 1222   1220      75   
#>  3 8120   8120      46   
#>  4 7141   7140      33   
#>  5 6111   6110      27   
#>  6 6111   6110      27   
#>  7 9313   9310      34   
#>  8 1221   1220      75   
#>  9 1221   1220      75   
#> 10 6111   6110      27   
#> # ℹ 48,275 more rows

# Using 2-digit ISCO
ess %>%
  transmute(
    isco88,
    isco88_2d = isco88_swap(isco88, from = 4, to = 2),
    oep = isco88_to_oep(isco88_2d)
  )
#> # A tibble: 48,285 × 3
#>    isco88 isco88_2d oep  
#>    <chr>  <chr>     <chr>
#>  1 5169   5100      22   
#>  2 1222   1200      81   
#>  3 8120   8100      50   
#>  4 7141   7100      42   
#>  5 6111   6100      25   
#>  6 6111   6100      25   
#>  7 9313   9300      26   
#>  8 1221   1200      81   
#>  9 1221   1200      81   
#> 10 6111   6100      25   
#> # ℹ 48,275 more rows

# Using 1-digit ISCO
ess %>%
  transmute(
    isco88,
    isco88_1d = isco88_swap(isco88, from = 4, to = 1),
    oep = isco88_to_oep(isco88_1d)
  )
#> # A tibble: 48,285 × 3
#>    isco88 isco88_1d oep  
#>    <chr>  <chr>     <chr>
#>  1 5169   5000      21   
#>  2 1222   1000      78   
#>  3 8120   8000      38   
#>  4 7141   7000      43   
#>  5 6111   6000      21   
#>  6 6111   6000      21   
#>  7 9313   9000      21   
#>  8 1221   1000      78   
#>  9 1221   1000      78   
#> 10 6111   6000      21   
#> # ℹ 48,275 more rows