Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.

# Re: st: How to return a Mata matrix in Stata

 From Alex Olssen To statalist@hsphsun2.harvard.edu Subject Re: st: How to return a Mata matrix in Stata Date Fri, 12 Aug 2011 23:23:16 +1200

```Thanks so much Tirthankar, that is really helpful!

On 12 August 2011 22:10, Tirthankar Chakravarty
<tirthankar.chakravarty@gmail.com> wrote:
> Once you have -st_matrix()-ed your -r()- variables from Mata to within
> the Stata -program-, you do not need to re-return- them from within
> the -program-. You should simply -return add- like in the code below:
>
> ************************************************************
> clear*
> sysuse auto, clear
> keep price length weight
>
> capture mata mata drop theta()
> mata
> void theta()
> {
>       st_view(test = ., ., .)
>       test_cov = variance(test)
>       st_matrix("r(v)", test_cov)
>       test_eigen = symeigensystem(test_cov, X = ., L = .)
>       st_matrix("r(eigval)", X)
>       st_matrix("r(eigvec)", L)
>       st_numscalar("r(theta)", L[1]/sum(L))
> }
> end
>
> capture program drop mytheta
> program define mytheta, rclass
>       version 11
>       mata theta()
>           ret li
>       display as txt " theta = " as res r(theta)
> end
>
> mytheta
> return list
> ************************************************************
>
> T
>
>
> On Fri, Aug 12, 2011 at 2:51 AM, Alex Olssen <alex.olssen@gmail.com> wrote:
>> Dear Statalisters,
>>
>> Can anyone help me return some matrices in a Stata program that calls
>> Mata?  My plan was to use -st_mata()- to names for the matrices and
>> then try a -return matrix- call in Stata.  Any help is appreciated.
>> Hopefully once I get my head around Mata I will be able to help some
>> people. :)  My code is below.  You can paste it straight into the
>> do-file editor and run it.  The problems are in the two lines that are
>> commented out.
>>
>> ************************************************************
>> sysuse auto, clear
>> keep price length weight
>>
>> capture program drop mytheta
>> program define mytheta, rclass
>>        version 11
>>        mata theta()
>>        display as txt " theta = " as res r(theta)
>>        // return matrix eigval = r(eigval)
>>        // return matrix eigvec = r(eigvec)
>>        return scalar theta = r(theta)
>> end
>>
>> capture mata mata drop theta()
>> mata
>> void theta()
>> {
>>        st_view(test = ., ., .)
>>        test_cov = variance(test)
>>        st_matrix("r(v)", test_cov)
>>        test_eigen = symeigensystem(test_cov, X = ., L = .)
>>        st_matrix("r(eigval)", X)
>>        st_matrix("r(eigvec)", L)
>>        st_numscalar("r(theta)", L[1]/sum(L))
>> }
>> end
>>
>> mytheta
>> ************************************************************
>>
>>
>> Kind regards,
>> Alex Olssen
>> *
>> *   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/
>>
>
>
>
> --
> Tirthankar Chakravarty
> tchakravarty@ucsd.edu
> tirthankar.chakravarty@gmail.com
>
> *
> *   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/
```