*! 1.1.0 NJC 20 April 2000 * 1.0.0 NJC 13 April 2000 program define matvsort6 version 6.0 gettoken A 0 : 0, parse(" ") gettoken B 0 : 0, parse(" ,") syntax [ , Decrease ] capture local nc = colsof(matrix(`A')) if _rc { di in r "matrix `A' not found" exit 111 } local nr = rowsof(matrix(`A')) if `nc' > 1 & `nr' > 1 { di in r "`A' not a vector" exit 498 } local nvals = max(`nr', `nc') if `nvals' > _N { di in r "number of observations too small" exit 198 } tempvar values names tempname C val qui { gen double `values' = . gen str1 `names' = "" mat `C' = J(`nr', `nc', 0) if `nr' == 1 { local Names : colfullnames(`A') local Row : rowfullnames(`A') local i = 1 while `i' <= `nc' { replace `values' = `A'[1, `i'] in `i' local Name : word `i' of `Names' replace `names' = "`Name'" in `i' local i = `i' + 1 } } else { local Names : rowfullnames(`A') local Col : colfullnames(`A') local i = 1 while `i' <= `nr' { replace `values' = `A'[`i', 1] in `i' local Name : word `i' of `Names' replace `names' = "`Name'" in `i' local i = `i' + 1 } } if "`decrease'" != "" { replace `values' = -`values' } sort `values' if "`decrease'" != "" { replace `values' = -`values' } local Names local i = 1 while `i' <= `nvals' { local Name = `names'[`i'] local Names "`Names' `Name'" local i = `i' + 1 } if `nr' == 1 { local i = 1 while `i' <= `nc' { scalar `val' = `values'[`i'] mat `C'[1, `i'] = `val' local i = `i' + 1 } } else { local i = 1 while `i' <= `nr' { scalar `val' = `values'[`i'] mat `C'[`i', 1] = `val' local i = `i' + 1 } } } mat `B' = `C' if `nr' == 1 { mat colnames `B' = `Names' mat rownames `B' = `Row' } else { mat rownames `B' = `Names' mat colnames `B' = `Col' } end