Statalist


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: mata problem "too many string literals"


From   Li <jli.can@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: mata problem "too many string literals"
Date   Mon, 23 Feb 2009 23:33:00 -0600

Hi Glenn,

M1 = st_data(.,tokens("`M1'")) solve my problem.
Thank you very much!

Best,
John


On Mon, Feb 23, 2009 at 8:01 AM, Glenn Goldsmith
<glenn.goldsmith@gmail.com> wrote:
> Hi John,
>
> It's a little difficult to tell what the problem is without knowing exactly
> what's in your locals, so you may need to provide more information to get a
> useful answer.
>
> I would have assumed from your description that they're varlists, and that
> the problem was therefore likely to be that -st_data()- requires them as
> string vectors. If that were the case, then
>
> M1 = st_data(.,tokens("`M1'"))
> Etc.
>
> should do the trick.
>
> However, when I throw a straight varlist at -st_data()- I get a different
> error message to the one you're getting (either "invalid expression", or
> "variable not found", depending on whether the varlist is enclosed in
> quotes). So that may not be the issue after all.
>
> It may also be worth mentioning that using local macros inside mata
> functions can cause problems unless you're sure what you're doing. The
> crucial thing to remember is that they're dereferenced at compile time, so
> if you change their contents after you've compiled the -obj()- function, the
> function won't know. It's not clear exactly how you're using them here, so
> you may be safe; but if you need to pass arguments to your objective
> function, use -optimize_init_argument()- instead.
>
> HTH,
>
> Glenn.
>
>
>
>>Hi there,
>>I am writing an optimization program using mata, in which the
>>objective function is given by obj(). However, my program cannot run
>>because of the following error:
>>
>>: void obj (todo, r, C, g, H)
>>> {
>>
>>>         M1 = st_data(.,`M1')
>>>         M2 = st_data(.,`M2')
>>>         M3 = st_data(.,`M3')
>>>         M4 = st_data(.,`M4')
>>>         M5 = st_data(.,`M5')
>>>         M6 = st_data(.,`M6')
>>>         M7 = st_data(.,`M7')
>>>         M8 = st_data(.,`M8')
>>too many string literals
>>(217 lines skipped)
>>---------------------------------------------------------------------------
>>---------------------------------------------------------------------------
>>-------
>>r(3000);
>>
>>end of do-file
>>
>>r(3000);
>>
>>
>>Macros Mi has been defined at the beginning of the program. By
>>defining these macros, I try to avoid writing a very long line of
>>variables in the objective function.
>>
>>Any help and suggestion is highly appreciated!
>>
>>Sincerely,
>>John
>
> *
> *   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/
>



-- 
Ideas matter.

*
*   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/



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