This is a bit easier in some other software
than it is in Stata. But is also a bit
easier than this. I agree with the main
idea, of looping over rows to select those
you want, but Paul's example can be condensed
and then extended a bit roughly along these
lines:
forval i=1/`=rowsof(mat1)' {
if mat1[`i',1]==999999 {
mat mat2 = nullmat(mat2) \ mat1[`i',2]
local rownames "`rownames' `i'"
}
}
matrix rownames mat2 = `rownames'
The key details are
1. use -rowsof()- to work out the number of rows
on the fly.
2. use -nullmat()- either to initialise or to
enlarge a matrix
3. use the loop to select the rownames as well,
if of interest.
That said, some canned routines in -matvsort-
on SSC are other possibilities in nearby terrain.
Nick
[email protected]
Paul Millar
> As far as I know, there is no easy way to do this in Stata.
> You will probably need at least 1 loop to do this:
>
> mat mat2=J(260,1,0)
> local rows=0
> forvalues i=1/260 {
> if mat1[`i',1]==999999 {
> local nrows=`nrows'+1
> mat mat2[`nrows',1]=mat1[`i',2]
> }
> }
> di "`nrows' rows updated in mat2"
Indranil Majumdar
> > I have a matrix (mat1) with the following data (extract).
> >
> > . matrix list mat1
> >
> > mat1[260,2]
> > ratsect cutoff
> > r1 999999 3.435e-06
> > r2 999999 4.572e-06
> > r3 999999 6.596e-06
> > r4 999999 9.606e-06
> > r5 999999 .00001548
> > r22 999998 5.470e-06
> > r23 999998 .0000119
> > r24 999998 .0000177
> > r25 999998 .0000295
> > r26 999998 .0000439
> >
> > I want to create another matrix (say mat2) with only those rows
> > that have a
> > particular 'ratsect' e.g. 999999
> >
> > I guess the command will look something like the following.
> > matrix mat2 = mat1["some expression ???",2]
> > I am not sure how to filter rows based on a criterion.
> > Any help will be appreciated.
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/