*! NJC 1.1.0 20 Apr 2000 (STB-56: dm79) program def matselrc * NJC 1.0.0 14 Oct 1999 version 6.0 gettoken m1 0 : 0, parse(" ,") gettoken m2 0 : 0, parse(" ,") if "`m1'" == "," | "`m2'" == "," | "`m1'" == "" | "`m2'" == "" { di in r "must name two matrices" exit 198 } syntax , [ Row(str) Col(str) Names ] if "`row'`col'" == "" { di in r "nothing to do" exit 198 } tempname A B mat `A' = `m1' /* this will fail if `matname' not a matrix */ local cols = colsof(`A') local rows = rowsof(`A') if "`col'" != "" { if "`names'" != "" { local colnum 1 } else { capture numlist "`col'", int r(>0 <=`cols') if _rc == 0 { local col "`r(numlist)'" } else if _rc != 121 { local rc = _rc error `rc' } local colnum = _rc == 0 } /* colnum = 1 for numbers, 0 for names */ tokenize `col' local ncols : word count `col' if `colnum' { mat `B' = `A'[1..., `1'] local j = 2 while `j' <= `ncols' { mat `B' = `B' , `A'[1..., ``j''] local j = `j' + 1 } } else { mat `B' = `A'[1..., "`1'"] local j = 2 while `j' <= `ncols' { mat `B' = `B' , `A'[1..., "``j''"] local j = `j' + 1 } } mat `A' = `B' local cols = colsof(`A') } if "`row'" != "" { if "`names'" != "" { local rownum 0 } else { capture numlist "`row'", int r(>0 <=`rows') if _rc == 0 { local row "`r(numlist)'" } else if _rc != 121 { local rc = _rc error `rc' } local rownum = _rc == 0 } /* rownum = 1 for numbers, 0 for names */ tokenize `row' local nrows : word count `row' if `rownum' { mat `B' = `A'[`1', 1...] local j = 2 while `j' <= `nrows' { mat `B' = `B' \ `A'[``j'', 1...] local j = `j' + 1 } } else { mat `B' = `A'["`1'", 1...] local j = 2 while `j' <= `nrows' { mat `B' = `B' \ `A'["``j''", 1...] local j = `j' + 1 } } mat `A' = `B' } mat `m2' = `A' end