This is a quick overview of how to use **asreg** command for running regressions by groups. To know about the installation and other details of asreg, please click here.

## Regressions by groups in Stata

A group is a subset of data that has a common identifier. Examples of groups can include families, industries, countries, regions, months, years, portfolios, etc. If a linear regression needs to be estimated separately for each group, **asreg** is the best option. **asreg** is blinking fast and writes all regression outputs to the data in memory as separate variables. This eliminates the need for writing the results to a separate file which is usually then merged back to the data for any further calculations. **asreg** eliminates all these steps and provides convenient and clean solution to by-group regression and rolling regressions. IF not installed, **asreg** can be installed from ssc with this line of code:

ssc install asreg

## An Example

We shall use the *grunfeld* data set in our example. Let’s download it first:

`webuse grunfeld`

Assume that we want to estimate a regression by year (in this example, year is our grouping variable) where the dependent variable is *invest*and independent variables are

*mvalue*and

*kstock*. Just like

*regress*command,

**asreg**uses the first variable as dependent variable and rest of the variables as independent variables. Using the

*grunfeld*data,

**asreg**command for estimating yearly regression would be:

`bysort year: asreg invest mvalue kstock`

Please note that the grouping variable *year*comes after the

*bysort*prefix which is followed by full colon. Similarly, if we want to estimate the above regression for each company, our grouping variable would be company that will come after the

*bysort*prefix:

`bys company: asreg invest mvalue kstock`

* List the estimated cofficientssort year company

`list company year _Nobs _R2 _adjR2 _b_mvalue _b_kstock _b_cons in 1/10`

## Standard errors and fitted values

If standard errors are needed for each explanatory variable, we shall just add the otpion ** se**. Similarly, we can add option

**if fitted values are required.**

*fit*`bys company: asreg invest mvalue kstock se`

`bys company: asreg invest mvalue kstock se fit`

Alexander MorrisSeptember 10, 2023 at 11:56 amHow can I run a regression by groups of firms and include lagged variables in the model?

Attaullah ShahSeptember 10, 2023 at 12:07 pmTo include lagged variables, you would first generate a lagged_variables and then supply it as an argument to the asreg command. For example, the following code generates the lagged variable L_mvlaue, declares the data panel data, and runs a regression of invest on mvalue, kstock, and the lagged value of mvalue for each company.