Statalist


[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: Mata r() strings


From   "Sergiy Radyakin" <serjradyakin@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Mata r() strings
Date   Mon, 27 Aug 2007 13:07:22 -0400

Hello William,

thank you for the explanation and the example.

Regards, Sergiy

On 8/27/07, William Gould, StataCorp LP <wgould@stata.com> wrote:
> Sergiy Radyakin <serjradyakin@gmail.com> reports,
>
> > I want to return a string among the r() values from a Mata function.
> >
> > According to the manual, the following function is to be used in this case:
> > > st_strscalar(string scalar name, string value)
> > [...]
> >
> > It does not seem to work however. The following is what happened:
> > **-------------1--------------------------------------------------
> >         : mata clear
> >         : void function my_test() {
> >         > st_strscalar("r(my_name)" ,"my_value")
> >         > }
> >         : my_test()
> >                   st_strscalar():  3300  argument out of range
> >                        my_test():     -  function returned error
> >                          <istmt>:     -  function returned error
> >         r(3300);
> >
> > As an alternative, I tried to store my string value to a local via st_local:
> > **-------------2--------------------------------------------------
> >         : mata clear
> >         : void function my_test() {
> >         > st_local("r(my_name)" ,"my_value")
> >         > }
> >         : my_test()
> >         _r(my_name) invalid name
> >                       st_local():  3300  argument out of range
> >                        my_test():     -  function returned error
> >                          <istmt>:     -  function returned error
> >         r(3300);
>
> First, "string scalars" are not currently allowed in r(), and that is why
> Mata gave an error when Sergiy coded
>
>            st_strscalar("r(my_name)" ,"my_value")
>
> What he coded would be correct syntax if Stata had string scalars.
>
> Stata expects strings in r() to be returned in macros. Sergiy tried,
>
>
>            st_local("r(my_name)" ,"my_value")
>
> but that did not work.  What would have worked is
>
>            st_global("r(my_name)" ,"my_value")
>
> and here's a demonstration:
>
>        . mata
>        ----------------------------------------- mata (type end to exit) -----
>        : st_rclear()
>
>        : st_global("r(myname)", "a string value")
>
>        : end
>        -----------------------------------------------------------------------
>
>        . ret list
>
>        macros:
>                     r(myname) : "a string value"
>
>        . _
>
> It's a fine point, but things like r(myname) are considered to be global
> macros and not local macros because those macros are exposed outside of
> the program that set them.
>
> -- Bill
> wgould@stata.com
> *
> *   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/
>
*
*   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/



© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index