Antonio has asked the following question

Dear Sir,
I was wondering how to run a Fama and MacBeth regression over 25 Portfolios. In accordance with your code, the first variable needs to be the dependent variable while the following variables are considered as independent variables. Basically, I would like to calculate the risk premium of a factor over the 25 value and size-sorted portfolios. Therefore in my case, I would have more dependent variables and just one dependent variable.
Thanks for your availability


Answer

To answer your question, I have preareed a dummy dataset, which you can download by typing the following in Stata command window.

use http://fintechprofessor.com/ff.dta, clear

So before running the Fama and MacBeth regressions, this is how the data needs to be structured.

The data is in a long format where the portfolios are tracked by a variable, called the panelvar. The portfolio returns are written in a separate variable, in our case, it is named as returns. The panelvar has values from 1, up to 25. The first 10 observations of the portfolios 1 and 2 look like:

. list in 1/10, noob
   +---------------------------------------------+
   |    mofd   P   returns       size        MTB |
   |---------------------------------------------|
   |  1993m6   1      .038    64.0125   5.224508 |
   |  1993m7   1     .0539   71.86839   4.505145 |
   |  1993m8   1    -.0639   27.82528   1.888283 |
   |  1993m9   1    -.0328   20.08383   7.730755 |
   | 1993m10   1     .0249   59.34985   8.961844 |
   |---------------------------------------------|
   | 1993m11   1     .0657   47.42625   3.766557 |
   | 1993m12   1     .0408   81.47429   5.148165 |
   |  1994m1   1     .0185   42.39914   5.375627 |
   |  1994m2   1     .0323   62.36839   4.882884 |
   |  1994m3   1   -.00598   64.79323   1.281697 |
   +---------------------------------------------+
 . list in 101/110, noob
   +---------------------------------------------+
   |    mofd   P   returns       size        MTB |
   |---------------------------------------------|
   |  1993m6   2     .0114   41.16883   4.549813 |
   |  1993m7   2    -.0158   10.09915   2.136258 |
   |  1993m8   2    .00616   73.43023   2.924793 |
   |  1993m9   2    -.0141   58.28651   7.608449 |
   | 1993m10   2     .0129    63.4972   1.137969 |
   |---------------------------------------------|
   | 1993m11   2    -.0223    16.1786   1.368057 |
   | 1993m12   2     .0322   64.10929   6.226629 |
   |  1994m1   2    -.0144   54.48264   7.883276 |
   |  1994m2   2     .0388   74.99379   1.362888 |
   |  1994m3   2     .0345   68.66164   7.102628 |
   +---------------------------------------------+



How to run the Fama and MacBeth regression

My asreg command is available on SSC, to download it, type:

ssc install asreg, replace

asreg can estimate three types of regressions: (1) cross-sectional regressions (2) rolling window regressions and (3) Fama and MacBeth regressions. You can read more details here.

Since our main focus here is on the Fama and MacBeth procedure, the discussion this point onwards will use option fmb of the asreg program. The syntax is:

asreg depvar indepvars, fmb

The data must be first declared as panel data with the xtset command. In our dataset, we have P as the panel variable and mofd as the time variable, therefore, to declare the data as panel data, the xtset command would be:

xtset P mofd

In our dataset, we have the variable returns as the dependent variable and size and MTB as the two independent variables. The command for the Fama and MacBeth regression would be:

. asreg returns  size MTB , fmb


Explanation

retunrs = The dependent variable

size and MTB = independent variables