# Re: st: re: matrix manipulation

 From "Austin Nichols" To statalist@hsphsun2.harvard.edu Subject Re: st: re: matrix manipulation Date Fri, 12 Dec 2008 10:42:19 -0500

```Or in one line:

sysuse auto,clear
qui reg price trunk weight length turn
mata:st_matrix("C",(st_matrix("e(V)"):<1000):*(st_matrix("e(V)"):^
-1):*(J(5,5,1)-I(5)))

note that each 5 could be replaced with rows(st_matrix("e(V)")) for
generality, but then the line would get really long.

On Fri, Dec 12, 2008 at 10:35 AM, Kit Baum <baum@bc.edu> wrote:
> <>
> The following will do these three things. _underbar_ is a Mata function
> being defined in the code below. Note that one of the diagonal elements
> should fall under the threshold of 10, but it is being zapped within the for
> loop.
>
> ---------------------
> mata: mata clear
> mata:
> void underbar(string scalar mat,
>               real scalar thresh)
> {
>        real matrix B
>        real scalar i
>        B =  (st_matrix(mat) :< thresh) :/ st_matrix(mat)
>        for(i=1; i<=rows(B); i++) {
>                B[i,i] = 0
>        }
>        st_matrix("B", B)
> }
> end
>
> sysuse auto,clear
> qui reg price trunk weight length turn
> mat list e(V)
> mata: underbar("e(V)", 10)
> mat list B
> ------------------------
>
> You might want to see my FNASUG or UKSUG slideshow on Stata programming with
> Mata, available from my IDEAS page below, regarding use of the colon
> operator (:< or :/ above) or the st_* functions.
>
>
> Kit Baum, Boston College Economics and DIW Berlin
> http://ideas.repec.org/e/pba1.html
> An Introduction to Modern Econometrics Using Stata:
> http://www.stata-press.com/books/imeus.html
>
>
> On Dec 12, 2008, at 09:50 , Susan Olivia wrote:
>
>> Thanks for the tips, Kit. I would like to use this opportunity to ask 3
>>
>> 1) For each cell (i,j) of matrix B, I would like to replace its value with
>> 1/(A[ij]) instead of dummy [0 1] as in before. In other words, matrix B[i,j]
>> = 1/A[i,j] if A[i,j] < THRESHOLD. I seem having problem in doing this.
>>
>> 2) The syntax you suggested "underbar", I seem couldn't find this entry in
>> the STATA manual. Can you please explain what is this doing? Perhaps once I
>> know what "underbar" is really doing, I can tackle #1.
>>
>> 3) Also, when the threshold condition met, the diagonal element of matrix
>> B is replaced to 1 or 1/aij. Ideally, I want the diagonal element to be
>> zero. Is there an efficient way to do this? What I currently do is transform
>> the matrix into variables and use the loop to change the diagonal element
>> and then transform the variables into the matrix. I.e.
>>
>> svmat B
>>
>> local i=1
>>     while `i'<=_N {
>>     qui recode B`i' 1=0 in `i'
>>     local i=`i'+1
>>     }
>>
>> mkmat B*, matrix(B)
>>
>>
>> Thanks in advance for any programming tips.
>>
>> Cheers,
>>
>> Susan
>>
>> On Thu, Dec 11, 2008 at 8:00 AM, Kit Baum <baum@bc.edu> wrote:
>> <>
>> Susan said
>>
>> I would like to create a binary matrix (say matrix B) using
>> the existing information from current matrix A.
>>
>> Specifically, for each cell (i,j) of matrix B, I want to
>> replace its value with 1 if the value of the corresponding
>> cell (i,j) of matrix A is less than the specified threshold
>> value. In other words, matrix B[i,j] = 1 if A[i,j] <
>> THRESHOLD.
>>
>>
>> No subscripting required:
>>
>> --------------------------------
>> mata: mata clear
>> mata:
>> void underbar(string scalar mat,
>>             real scalar thresh)
>> {
>>       st_matrix("B", (st_matrix(mat) :< thresh))
>> }
>> end
>>
>> sysuse auto,clear
>> qui reg price trunk weight length turn
>> mat list e(V)
>> mata: underbar("e(V)",0.0001)
>> mat list B
>> -----------------------------------
>>
>> You could pass the name of the result matrix to Mata as well if you wanted
>> this to be a bit more general.
>>
>> Kit Baum, Boston College Economics and DIW Berlin
>> http://ideas.repec.org/e/pba1.html
>> An Introduction to Modern Econometrics Using Stata:
>> http://www.stata-press.com/books/imeus.html
>>
>>
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/statalist/faq
>> *   http://www.ats.ucla.edu/stat/stata/
>>
>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/
>
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```