We provide Python code to estimate production functions and firm-level markups from firm-level income statements. The code implements the algorithm described in the appendix of The Hitchhiker's Guide to Markup Estimation: Assessing Estimates from Financial Data 

In the code that can be downloaded here, we reproduce the estimation of markup and the underlying production function coefficients from:  

The Rise of Market Power and the Macroeconomic Implications, De Loecker, Eeckhout, and Unger,  The Quarterly Journal of Economics, Volume 135, Issue 2, May 2020, Pages 561–644, https://doi.org/10.1093/qje/qjz041

We believe that this code is easy to use and to apply to different firm-level datasets. 


Citation suggestion:

De Ridder, Grassi,  and Morzenti (2024), DP17532, "The Hitchhiker’s Guide to Markup Estimation: Assessing Estimates from Financial Data", CEPR Discussion Paper No. 17532. CEPR Press, Paris & London. https://cepr.org/publications/dp17532

Download Aggregate Markup Time-Series

The times series for the aggregate markups in the figure below can be downloaded here.  

You will find:

The first two are aggregate markup series while the last two are moments of firm-level markup distribution.

(The last tow series estimates from the original  De Loecker, Eeckhout, and Unger (2020) can be downloaded here from Jan De Loecker's website.)

The Replication Code and How to Use it

Code structure

The zip file contains:

Note: you will need to bring your Compustat data

How does it work?

First, run the Clean_data.do in your Stata, after changing some path. This will compute the cleaned dataset COMPUSTAT_clean.csv.

Second Run_Compustat_HarmonicMean_VPublic.py with your python. This will perform the estimation and save the firm-level markups in Compustat_Markups_Python_V1.dta and the production function coefficients in the Stata datasets  Compustat_Betas_Python_V1.dta and Compustat_BetasRoll_Python_V1.dta. The class ProdFun_VPublic.py allows for many different options that are explained directly in the script.

Our code produces the figure above that plots sales-weighted simple mean markup and the sales-weighted harmonic mean markup: