Translate ISCO codes to OEP (Occupational Earning Potential)
isco08_to_oep.Rd
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.
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