# NBER MORG codebook

**URL:** <https://forum.ipums.org/t/nber-morg-codebook/6712>\
**Category:** CPS\
**Created:** [August 9, 2025, 12:20am UTC](https://forum.ipums.org/t/nber-morg-codebook/6712 "2025-08-09T00:20:18Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Andres\_Rodriguez-Cac](https://avatars.discourse-cdn.com/v4/letter/a/85f322/32.png) [@Andres\_Rodriguez-Cac](https://forum.ipums.org/u/Andres_Rodriguez-Cac)\
**Post date:** [August 9, 2025, 12:20am UTC](https://forum.ipums.org/t/nber-morg-codebook/6712/1 "2025-08-09T00:20:18Z")

</div>

Hi!  
Sorry if this is a basic question but I can’t seem to find the answer anywhere.

I have have a file of CPS ASEC data that I want to merge with the MORG files available at NBER. Specifically, I’d like to look at union coverage by year x state x occupation/class/industry (kinda like what [unionstats.com](http://unionstats.com) does). However, I’m not sure how class, occupation, and industry are coded in the MORG file, so I’m not sure which variables I’d need in my ASEC file (e.g. OCCLY, OCC10LY, etc). Thanks!

---

<div class="post-metadata">

**Author:** ![Ivan\_Strahof](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.ipums.org/ivan_strahof/32/626_2.png) [@Ivan\_Strahof](https://forum.ipums.org/u/Ivan_Strahof)\
**Post date:** [August 12, 2025, 3:59pm UTC](https://forum.ipums.org/t/nber-morg-codebook/6712/2 "2025-08-12T15:59:16Z")

</div>

It sounds like you are interested in merging harmonized CPS data from IPUMS with the NBER merged outgoing rotation group (MORG) files. Note that [IPUMS CPS](https://cps.ipums.org/cps/index.shtml) offers the outgoing rotation group data together with each ASEC (1990-onwards) and Basic Monthly Survey (1983-onwards) sample. The [Outgoing Rotation Groups (ORG) variable selection page](https://cps.ipums.org/cps-action/variables/group/org_org?variableType=HARMONIZED) displays the harmonized ORG variables that IPUMS offers, including the variable [UNION](https://cps.ipums.org/cps-action/variables/UNION). An extract with both ASEC and ORG variables will have a single observation per person, with responses from each component already merged together onto the same person-record.

The NBER MORG file will code occupation and industry based on the Census Bureau classification system that was used contemporaneously (see [the MORG documentation for reference](https://www.nber.org/research/data/current-population-survey-cps-merged-outgoing-rotation-group-earnings-data)); the corollary to these unharmonized values are available in IPUMS CPS as [OCC](https://cps.ipums.org/cps-action/variables/OCC), [IND](https://cps.ipums.org/cps-action/variables/IND), [OCCLY](https://cps.ipums.org/cps-action/variables/OCCLY), and [INDLY](https://cps.ipums.org/cps-action/variables/INDLY). I am linking to a [blog post](https://blog.popdata.org/mergecpsfile/) and [forum discussion](https://forum.ipums.org/t/cps-and-nber-merge/5503) that include information on merging IPUMS and NBER versions of the CPS data.

---

<div class="post-metadata">

**Author:** ![Andres\_Rodriguez-Cac](https://avatars.discourse-cdn.com/v4/letter/a/85f322/32.png) [@Andres\_Rodriguez-Cac](https://forum.ipums.org/u/Andres_Rodriguez-Cac)\
**Post date:** [August 13, 2025, 7:38pm UTC](https://forum.ipums.org/t/nber-morg-codebook/6712/3 "2025-08-13T19:38:11Z")

</div>

Thank you Ivan, this is super helpful. Because I would rather have dates the 1979-1983 data, I am looking to use the MORG dataset from NBER if at all possible. What I’m thinking is that the best solution might be to use the broadest codes of OCCLY/INDLY which are consistent throughout (using the first and second digit of the codes). Would this make sense?

---

<div class="post-metadata">

**Author:** ![Ivan\_Strahof](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.ipums.org/ivan_strahof/32/626_2.png) [@Ivan\_Strahof](https://forum.ipums.org/u/Ivan_Strahof)\
**Post date:** [August 14, 2025, 9:04pm UTC](https://forum.ipums.org/t/nber-morg-codebook/6712/4 "2025-08-14T21:04:53Z")

</div>

Thanks for clarifying. This approach makes sense, though you should note that both OCCLY and INDLY use the 1970 classification system in samples from 1971-1982 and the 1980 system in samples from 1983-1991. The two systems are very different (compare [1970 OCC codes](https://cps.ipums.org/cps/codes/occ_19711982_codes.shtml) to [1980 OCC codes](https://cps.ipums.org/cps/codes/occ_19831991_codes.shtml)); using only the first digit might not provide you with comparable groups. If you require bridging one or more of these code vintages, I recommend using our harmonized occupation and industry variables: [OCC1990](https://cps.ipums.org/cps-action/variables/OCC1990#description_section) and [IND1990](https://cps.ipums.org/cps-action/variables/IND1990#description_section). These code occupations and industries across vintages into consistent groups from the 1990 census using a modal assignment protocol (see the variable documentation for more information).

To make use of these harmonized variables with the MORG files, you’d first need to create a crosswalk using IPUMS CPS data (see [this blog post for a step-by-step guide](https://blog.popdata.org/occupation_industry_codes/)). You will need to create the OCC and IND crosswalks individually for each code vintage you plan to use. For example, you can request the 1980 ASEC with both OCC and OCC1990 in order to collapse it into an occupation code crosswalk for samples from 1971-1982. Once you have this crosswalk, you can then use it to recode the vintage-specific 3-digit occupations in the MORG files to OCC1990. You can also aggregate OCC1990/IND1990 into more general occupation/industry groups by using the headings in the variable _codes_ tab.

---

<div class="post-metadata">

**Author:** ![Andres\_Rodriguez-Cac](https://avatars.discourse-cdn.com/v4/letter/a/85f322/32.png) [@Andres\_Rodriguez-Cac](https://forum.ipums.org/u/Andres_Rodriguez-Cac)\
**Post date:** [August 15, 2025, 7:46pm UTC](https://forum.ipums.org/t/nber-morg-codebook/6712/5 "2025-08-15T19:46:14Z")

</div>

Thanks! If I understand correctly, this will be my plan of attack:

I will download the OCC codes for each decade of interest and map it to the OCCLY90 variable. I’m not sure how to deal with the issue that the codes don’t always go from X → Y but sometimes go from X -\>Y and X-\> Z. My guess is that the best solution is to move the X’s to the modal category between Y and Z (use weighted count and see if there’s more Ys than Zs).

---

<div class="post-metadata">

**Author:** ![Ivan\_Strahof](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.ipums.org/ivan_strahof/32/626_2.png) [@Ivan\_Strahof](https://forum.ipums.org/u/Ivan_Strahof)\
**Post date:** [August 19, 2025, 3:20pm UTC](https://forum.ipums.org/t/nber-morg-codebook/6712/6 "2025-08-19T15:20:01Z")

</div>

The harmonized occupation codes already do this work for you! Each [OCC](https://cps.ipums.org/cps-action/variables/OCC)/[OCCLY](https://cps.ipums.org/cps-action/variables/OCCLY) will always map to a single [OCC1990](https://cps.ipums.org/cps-action/variables/OCC1990#description_section)/[OCC90LY](https://cps.ipums.org/cps-action/variables/OCC90LY) code using a modal assignment procedure. This procedure is based on a series of technical papers published by the Census Bureau where observations are double coded into the occupational schemes of the current and previous census year (see OCC1990 for more information). Depending on how specific the occupations that you want to study are, you might additionally consider aggregating occupations into broad categories implicit in the 1990 scheme in order to increase comparability across code vintages.
