Hi
I have figured out what was going wrong. However, I have another question. I
keep getting the same output regardless of what variable is chosen. I
thought each new value of "``k''" also corresponded to each subsequent
variable in the variable list. Am I mistaken about that?
local k=2
while "``k''" ~= "" {
local kless1 = `k' - 1
tempvar e2var`kless1'q
ge `e2var`kless1'q' = `e2qq' * ``k'' `if'
if "`heteroscedasticity'" ~= "" { local namevar: word 1 of
`heteroscedasticity'}
tempvar hetvar
foreach var of varlist `varlist' {
if "`var'"=="``k''" {ge `hetvar'=`e2var`kless1'q'}
}
local k = `k'+1
}
______________________________________________________
Maureen Paul
Department of Economics
University of Warwick
Coventry CV4 7AL
UK
Phone: +44 (0)24 76528418
Fax: +44 (0)24 76523032
Email: [email protected]
Web page: http://www.warwick.ac.uk/~ecrha/
----- Original Message -----
From: "Nick Cox" <[email protected]>
To: <[email protected]>
Sent: Wednesday, July 03, 2002 6:28 PM
Subject: RE: st: RE: programming question
> Maureen Paul
> >
> > Thanks for the reply. I will try what you suggested. I have included
> > a good portion of the propramme so illustrate what I am trying to do.
> > The error occurs here:
> > - while `k' <= `x' {
> > - tempvar y`k'var1q
> > - ge `y`k'var1q' = `y`k'iqq' * `2' `if'
> > INVALID SYNTAX
> > local k = `k' + 1
> > }
> >
> > but it works fine if I remove the bit where I inlcude the
> > heteroscedasticity bit.
> >
> > noisily oprobit `*' `if' [`weight'`exp']
> >
> >
> > scalar `catnum'=e(k_cat)
> > scalar `degreef'=e(df_m)
> > scalar `obs' = e(N)
> >
> > predict `scoreqq' `if', xb
> > ge `scor_uqq' = `scoreqq'
> > replace `scor_uqq' =. if `1'==.
> > ge `scor_nqq' = `scor_uqq'
> > replace `scor_nqq' = `scor_uqq' - _b[`2'] if `2'==1
> > replace `scor_uqq' = `scor_nqq' + _b[`2'] if `2'==0
> >
> > ge `diffqq1' = normprob(_b[_cut1]-`scor_uqq') - normprob(_b[_cut1]-
> > `scor_nqq') if `1'~=.
> >
> > su `diffqq1' `if'
> > scalar `diff1' = r(mean)
> > scalar `check' = `diff1'
> > su `1' `if'
> > scalar `depmin' = r(min)
> > scalar `depmax' = r(max)
> >
> > ge `wj' = ( _b[_cut1] - `scoreqq' ) `if'
> > ge `PHIwj' = normprob(`wj') `if'
> > ge `phiwj' = (1/sqrt(2*_pi)) * exp( (`wj'^2)/-2 ) `if'
> >
> > ge `eqq'=( -1 * `phiwj' ) / (`PHIwj') if `1'==`depmin' & `ifexp'
> > ge `e2qq'=( -1 * `wj' * `phiwj' ) / ( `PHIwj' ) if `1'==`depmin' &
> > `ifexp'
> > ge `e3qq'=( -1 * (`wj'^2) * `phiwj' ) / ( `PHIwj' ) if
> > `1'==`depmin' & `ifexp'
> > ge `e4qq'=( -1 * (`wj'^3) * `phiwj' ) / ( `PHIwj' ) if
> > `1'==`depmin' & `ifexp'
> >
> > su `1' if `1'>`depmin' & `ifexp'
> > local j = r(min) /* set j to 2nd lowest value of dep
> > var */
> > local x = 2
> >
> >
> > while `j' <= `depmax' {
> >
> > local xless1 = `x'-1
> > drop `diffqq1'
> > if `j' < `depmax' {
> > ge `diffqq1' = ( normprob(_b[_cut`x']-`scor_uqq') -
> > normprob(_b[_cut`x']-`scor_nqq') ) /*
> > */ - ( normprob(_b[_cut`xless1']-`scor_uqq') -
> > normprob(_b[_cut`xless1']-`scor_nqq') ) /*
> > */ if `1'~=.
> > }
> > else {
> > ge `diffqq1' = normprob(`scor_uqq'-_b[_cut`xless1']) -
> > normprob(`scor_nqq'-_b[_cut`xless1']) if `1'~=.
> > }
> > su `diffqq1' `if'
> > local diff`x' = r(mean)
> > scalar `check' = `check' + `diff`x''
> >
> > rename `wj' `wj_1'
> > rename `phiwj' `phiwj_1'
> > rename `PHIwj' `PHIwj_1'
> >
> > if `j'~=`depmax' {
> > ge `wj' = ( _b[_cut`x'] - `scoreqq' ) `if'
> > ge `phiwj' = (1/sqrt(2*_pi)) * exp( (`wj'^2)/-2 ) `if'
> > ge `PHIwj' = normprob(`wj') `if'
> > }
> > else {
> > ge `wj' = 0
> > ge `phiwj' = 0
> > ge `PHIwj' = 1
> > }
> >
> > replace `eqq'=( `phiwj_1' - `phiwj' ) / ( `PHIwj' - `PHIwj_1' ) if
> > `1'==`j' & `ifexp'
> > replace `e2qq'=( (`wj_1' * `phiwj_1') - (`wj' * `phiwj') ) /*
> > */ / ( `PHIwj' - `PHIwj_1' ) if
> > `1'==`j' & `ifexp'
> > replace `e3qq'=( ((`wj_1'^2) * `phiwj_1') - ((`wj'^2) * `phiwj') )
> > /*
> > */ / ( `PHIwj' - `PHIwj_1' ) if
> > `1'==`j' & `ifexp'
> > replace `e4qq'=( ((`wj_1'^3) * `phiwj_1') - ((`wj'^3) * `phiwj') )
> > /*
> > */ / ( `PHIwj' - `PHIwj_1' ) if
> > `1'==`j' & `ifexp'
> >
> > if `j'~=`depmax' {
> > tempvar y`x'iqq
> > ge `y`x'iqq' = 0 `if'
> > replace `y`x'iqq'=( `phiwj' ) / ( `PHIwj' -
> > `PHIwj_1' ) if `1'==`j'
> > & `ifexp'
> > }
> >
> > if `x'~=2 {
> > replace `y`xless1'iqq'=( -1 * `phiwj_1' ) / (
> > `PHIwj' - `PHIwj_1' )
> > /*
> > */ if `1'==`j' & `ifexp'
> > }
> >
> > su `1' if `1'>`j' & `ifexp'
> > local j = r(min) /* replace j with next value of dep var */
> > local x=`x'+1
> > drop `wj_1' `phiwj_1' `PHIwj_1'
> > }
> >
> >
> > replace `e3qq' = `e3qq' + (2 * `eqq') `if'
> > replace `e4qq' = `e4qq' + (3 * `e2qq') `if'
> >
> > local x=`xless1' /* set x to the number of cuts
> > */
> > local onecut=( `x' == 1 ) /* onecut=1 if only one cut
> > */
> >
> > ge `regdepqq'=1 `if'
> > ge `escscq'=`eqq' * `scoreqq' * `scoreqq' `if'
> > ge `esc3qq'=`escscq' * `scoreqq' `if'
> > ge `esc4qq'=`esc3qq' * `scoreqq' `if'
> > ge `e2scscq'=`e2qq' * `scoreqq' * `scoreqq' `if'
> >
> > local n=2
> > local lastvar=0
> > while "``n''" ~= "" & `lastvar' ~= 1 {
> > local m=`n'-1
> > tempvar evar`m'qq
> > ge `evar`m'qq' = `eqq' * ``n'' `if'
> > local n = `n'+1
> > local lastvar = ( "``n''" == "if" )
> > }
> >
> > local k=2
> > while "``k''" ~= "" {
> > local kless1 = `k' - 1
> > tempvar e2var`kless1'q
> > ge `e2var`kless1'q' = `e2qq' * ``k'' `if'
> >
> > if "`heteroscedasticity'" ~= "" { parse "`heteroscedasticity'",
> > parse(" ")
> > tempvar hetvar
> > local namevar "`1'"
> > foreach var of varlist `varlist' {
> > if
> > "`var'"=="``k''" {ge `hetvar'=`e2var`kless1'q'' `if'}
> >
> > }
> >
> > local k = `k'+1
> >
> > }
> >
> >
> > local k=2
> > while `k' <= `x' {
> > tempvar y`k'var1q
> > ge `y`k'var1q' = `y`k'iqq' * `2' `if'
> > local k = `k' + 1
> > }
> > local k=2
> > while `k' <= `x' {
> > local pless1 = -1
> > local p=3
> > while "``p''" ~= "" {
> > local pless1 = `p' - 1
> > tempvar y`k'var`pless1'q
> > ge `y`k'var`pless1'q' = `y`k'iqq' * ``p'' `if'
> > local p = `p'+1
> > }
> > local k = `k' + 1
> > } /* separate loops so keep order of
> > vars */
> > local k=2
> > while `k' <= `x' {
> > tempvar y`k'scscq
> > ge `y`k'scscq' = `y`k'iqq' * `scoreqq' * `scoreqq' `if'
> > local k = `k'+1
> > }
> >
> > }
> >
> >
> > local yxiqqs=""
> > if `onecut' ~= 1 {
> > local yxiqqs=" `y2iqq'-`y`x'iqq' "
> > }
> >
> >
> >
> > if "`heteroscedasticity'" ~= "" {
> > quietly regress `regdepqq' `evar1qq'-`evar`m'qq' `hetvar' `yxiqqs'
> > `if' [`weight' `exp'], noconstant
> > if e(N) ~= `obs' { display "ERROR " e(N) "observations, when should
> > be " `obs' }
> > display in text "Heteroscedasticity w.r.t. `namevar'" _col(48) "{c
> > |}" %11.7f as result e(r2)*e(N) %18.7f chi2tail(1,e(r2)*e(N))
> >
> > }
> >
> > display as text "{hline 47}" _col(48) "{c BT}" "{hline 31}"
> >
> > end
>
> Main question is what is `2' when the program
> crashes.
>
> Insert -noi mac li- just before that line.
>
> Nick
> [email protected]
>
> *
> * 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/