`(1978 automobile data)`

## First the basics

As you may know, whenever `Stata`

runs calculations, it stores the information created in *elements* that can be easily accessed in subsequent commands.

While most standard users will not require to know how to manipulate this information, if you are trying to advances your programming skills, it will be necessary for you to learn what type of information can be contained in this elements, and how to modify them. A good place to start learning about them is by typing `help return`

.

Overall, there are three types of elements:

r-class: These elements are produced by non-estimation commands. For example, after `summarize`

, you can see what information is stored by the command by typing `return list`

. They can store locals, scalars and matrices.

```
. summarize mpg
Variable | Obs Mean Std. dev. Min Max
-------------+---------------------------------------------------------
mpg | 74 21.2973 5.785503 12 41
. return list
scalars:
r(N) = 74
r(sum_w) = 74
r(mean) = 21.2972972972973
r(Var) = 33.47204738985561
r(sd) = 5.785503209735141
r(min) = 12
r(max) = 41
r(sum) = 1576
.
```

e-class: These elements are typically produced after estimation commands. At the minimum, it will contain information of estimated coefficients, variance covariance matrix, and the estimation command that was used. To see the information left behind, you just need to type `ereturn list`

. They can store locals, scalars and matrices.

```
qui:reg price mpg
ereturn list
```

```
scalars:
e(N) = 74
e(df_m) = 1
e(df_r) = 72
e(F) = 20.25835256291882
e(r2) = .2195828561874973
e(rmse) = 2623.652888667587
e(mss) = 139449473.54623
e(rss) = 495615922.5753916
e(r2_a) = .2087437291901014
e(ll) = -686.5395809065244
e(ll_0) = -695.7128688987767
e(rank) = 2
macros:
e(cmdline) : "regress price mpg"
e(title) : "Linear regression"
e(marginsok) : "XB default"
e(vce) : "ols"
e(depvar) : "price"
e(cmd) : "regress"
e(properties) : "b V"
e(predict) : "regres_p"
e(model) : "ols"
e(estat_cmd) : "regress_estat"
matrices:
e(b) : 1 x 2
e(V) : 2 x 2
e(beta) : 1 x 1
functions:
e(sample)
```

s-class: These elements are used to help with parsing. They can only store locals.

## Adding elements to e() and r()

While creating and modifying this information from within your own programs is easy, some times, you may want to add additional information to your summary statistics, or your regression results. You may also want to create a set of results from scracth, but being able to store it in equation form.

Well, to do this, you can use the programs `adde`

and `addr`

. Both programs have the goal of adding or modifying information to e() and r(). They structures are rather simple:

```
program adde, eclass
ereturn `0'
end
program addr, rclass
syntax anything(equalok), [new copy]
if "`new'"=="" {
return add
if "`copy'"!="" local 0 `anything', copy
else local 0 `anything'
}
else {
if "`copy'"!="" local 0 `anything', copy
else local 0 `anything'
}
return `0'
end
```

Because examples are usally better than words, here a very small example:

First using `adde`

:

```
qui:reg price mpg
local note "Regression MPG vs Price"
adde local data "auto.dta"
adde ereturn list
```

```
scalars:
e(N) = 74
e(df_m) = 1
e(df_r) = 72
e(F) = 20.25835256291882
e(r2) = .2195828561874973
e(rmse) = 2623.652888667587
e(mss) = 139449473.54623
e(rss) = 495615922.5753916
e(r2_a) = .2087437291901014
e(ll) = -686.5395809065244
e(ll_0) = -695.7128688987767
e(rank) = 2
macros:
e(data) : "auto.dta"
e(note) : "Regression MPG vs Price"
e(cmdline) : "regress price mpg"
e(title) : "Linear regression"
e(marginsok) : "XB default"
e(vce) : "ols"
e(depvar) : "price"
e(cmd) : "regress"
e(properties) : "b V"
e(predict) : "regres_p"
e(model) : "ols"
e(estat_cmd) : "regress_estat"
matrices:
e(b) : 1 x 2
e(V) : 2 x 2
e(beta) : 1 x 1
functions:
e(sample)
```

But also with `addr`

:

```
qui:sum price
local note "Summary of Price"
addr scalar magic = 1
addr return list
```

```
scalars:
r(magic) = 1
r(sum) = 456229
r(max) = 15906
r(min) = 3291
r(sd) = 2949.495884768919
r(Var) = 8699525.974268788
r(mean) = 6165.256756756757
r(sum_w) = 74
r(N) = 74
macros:
r(note) : "Summary of Price"
```

## Installation

To install this programs, simply create ado files with the names `addr.ado`

and `adde.ado`

, and save them in your personal ado folder. otherwise, just copy the versions I provide you here: `adde`

and `addr`