CJ12
CJ12

Reputation: 495

Saving Constructed Means in a Matrix in Stata

Have sales and a time indicator as such:

time    sales
  1       6
  2       7
  1       5
  3       4
  2       4
  5       7
  4       3 
  3       2
  5       1
  5       4
  3       1
  4       9
  1       8

I want the mean, stdev, and N of the above saved in a t (each time period has a row) X 4 (time period, mean, stdev, N) matrix.

For time = 5 the matrix would be:

time    mean   stdev  N
 ...     ...    ...  ...
  5       4      3    3
 ...     ...    ...  ...

Just for the mean I tried:

mat t1=J(5,1,0) 
forval i = 1/5 {
    summ sales if time == `i'
    mat t1[`i']=r(mean) 
    }

However, I kept getting an error. Even if it worked I was unsure how to get the other (stdev and N) variables of interest.

Upvotes: 1

Views: 1545

Answers (1)

Roberto Ferrer
Roberto Ferrer

Reputation: 11102

You were probably aiming for something like

matrix t1 = J(5, 1, .) 
forvalues i = 1/5 {
    summarize sales if time == `i'
    matrix t1[`i', 1] = r(mean) 
}
matrix list t1

U[14.9] Subscripting specifies you need matname[r,c]. You were leaving out the second subscript. In Mata you are allowed to subscript vectors in this way but you never enter Mata.

An alternative is

forval i = 1/5 {
    summarize sales if time == `i'
    matrix t1 = (nullmat(t1) \ r(mean))
}

With the latter, you have no need of declaring the matrix beforehand. See help nullmat().

But it's probably easiest to use collapse and get all information in one step:

clear all
set more off

input ///
time    sales
  1       6
  2       7
  1       5
  3       4
  2       4
  5       7
  4       3 
  3       2
  5       1
  5       4
  3       1
  4       9
  1       8
end

collapse (mean) msales=sales (sd) sdsales=sales /// 
    (count) csales=sales, by(time)

list

Note that count counts nonmissing observations only.

If you want a matrix then convert the variables using mkmat, after the collapse:

mkmat time msales sdsales csales, matrix(summatrix)
matrix list summatrix

Upvotes: 1

Related Questions