Jingjing,
As Nick pointed out, you know the names of your own variables. We
don't. So, when I said "right hand side variables" I meant the list of
right hand side variables in your equations, in the order that your
program needs them. Your program reads something like
args lnc sl sk sm lnpl lnpk lnpm lnpe lnq t d1 d2 d3 d4 d5 d6
, and only you know what these names stand for. All we know is that
the first four are left hand side variables, and the rest are right
hand side variables in your equations.
So, besides
matrix a = J(1,62,0)
you need to create copies of your left hand side variables, which you can do by
gen copy_var1 = var1
assuming that var1 is the name of your variable. Do this for all your
left hand side variables, and then call your program with the list of
all 16 variables that you need for your equations, in the order
lnc sl sk sm lnpl lnpk lnpm lnpe lnq t d1 d2 d3 d4 d5 d6
because this is what your program asks for. Just make sure that,
instead of providing the names of your left hand side variables, you
provide the names of their _copies_. -set trace on- and see what
happens.
As a general remark, you might find it useful to attend a NetCourse by
Statacorp, especially NC151.
Eva
2009/3/15 <[email protected]>:
> Sorry but could you take a example?
>
>
>
> Quoting Nick Cox <[email protected]>:
>
>> Eva's text was not meant to be taken literally!
>>
>> Your own syntax commits you to supplying 16 variable names and the name
>> of a matrix in an option.
>>
>> Nick
>> [email protected]
>>
>> [email protected]
>>
>> Here's the return:
>>
>>
>> . matrix a = J(1,62,0)
>>
>> . set trace on
>>
>> .
>> . nlsurwellbehav "copies of dep. variables" "right hand side
>> variables" , at(a)
>> ---------------------------------------------------------------- begin
>> nlsurwellbehav ---
>> - version 10.1
>> - syntax varlist(min=16 max=16) [if], at(name)
>> time-series operators not allowed
>> ------------------------------------------------------------------ end
>> nlsurwellbehav ---
>> r(101);
>>
>> Quoting Eva Poen <[email protected]>:
>>
>>> I'm not sure I understand you here. Are you referring to the line
>>>
>>>> replace `lnc' = 5+`aq'*`lnq' ...
>>>
>>> where there is a hard coded 5 (not a starting value! This is a set
>>> value.), and did you replace this value of 5 by another parameter,
>>> e.g. `a0'? In terms of the program, that is not a problem as long as
>>> you adjust your code. It would be easiest if you put this parameter
>>> last, since this saves you the pain of changing all your `at'[1,x]
>>> statements to `at'[1,x+1]. Therefore, my suggestion would be to code
>>>
>>> scalar `dmm'=`at'[1,61]
>>> tempname a0
>>> scalar `a0' =`at'[1,62]
>>>
>>>
>>> quietly {
>>> replace `lnc' = `a0'+ ....
>>> }
>>>
>>> Now, for the debugging, just follow my suggestions earlier, and invoke
>>> your program directly. You need to create a matrix of initial values,
>>> e.g. zeros for all coefficients. If you have 62 parameters, you do
>>>
>>> matrix a = J(1,62,0)
>>>
>>> which gives you a row vector of 62 zeros. Next create copies of all
>>> your dependent variables, and invoke your program:
>>>
>>> set trace on
>>> nlsurwellbehav "copies of dep. variables" "right hand side variables" ,
>>> at(a)
>>>
>>> and see where the problem lies.
*
* 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/