Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: predict and resid in a nested loop
From
Nahla Betelmal <[email protected]>
To
[email protected]
Subject
Re: st: predict and resid in a nested loop
Date
Wed, 31 Jul 2013 18:59:28 +0100
Thanks Nick. great help as usual. And thanks for the trace on and
traced 1 tip.
The loop is working now, and I would like to share it with other
users. I hope they find it useful.
gen fitted=.
gen resi =.
forval y=1989/2012 {
forval i= 1/55 {
reg DV IV_1 IV_2 IV_3 if industry== `i' & year==`y'
predict f if industry== `i' & year==`y'
predict r if industry== `i' & year==`y', resid
replace fitted= f if industry== `i' & year==`y'
replace resi = r if industry== `i' & year==`y'
drop f
drop r
}
}
Also, if anyone sets trace on, I recommend to set more off first
especially for large data set. After finishing trace, the command is
: set trace off, and you can set more on again if desired.
Thanks again
Nahla
On 31 July 2013 18:08, Nick Cox <[email protected]> wrote:
> The bad news is that there are bugs everywhere. The good news is that
> they seem easy to spot. The important news is that to learn how to
> debug yourself you must start using
>
> set trace on
> set traced 1
>
> and look at the output line by line. Then you can see what Stata sees and why.
>
> Assume that when you start your code no variable called -f- exists.
>
> Then the first time you try
>
> predict f
>
> that should work. But the second time you try it, it won't work,
> because -f- already exists and -predict- requires a new variable name.
>
> You would get the same problem with -predict r-, except that Stata
> bailed out first.
>
> The solution is to
>
> drop f r
>
> once you have used them.
>
> I guess varlist not allowed r(101); arises because you have an
> unnecessary space in the -predict- command giving the impression that
> you are trying to specify two new variable names. (Similar errors can
> be spotted in several places).
>
> You have a line
>
> predict f if `i' `y'
>
> which first time it is met becomes
>
> predict f if 1 1989
>
> Stata is happy with
>
> if 1
>
> which doesn't bite, but "1989" by itself makes no sense. Basically,
> your line is incomplete. You needed something like
>
> predict f if industry == `i' & year == `y'
>
> Nick
> [email protected]
>
>
> On 31 July 2013 17:43, Nahla Betelmal <[email protected]> wrote:
>> Dear Statalist,
>>
>> I am trying to get the fitted values and residuals from
>> cross-sectional regression in a nested loop ( regression per industry
>> and year). I tried four ways according to my search in previous
>> threads, but obviously I am missing something!
>>
>> In the first two loops I got the error message : f already defined r(110);
>>
>> In the third one I got the error message: varlist not allowed r(101);
>> (I also put the & sign between i and y, but same error)
>>
>> In the last one I got the error message : invalid '1989' r(198);
>>
>>
>>
>>
>>
>> gen fitted=.
>> gen resi =.
>> forval y=1989/2012 {
>> forval i= 1/55 {
>> reg DV IV_1 IV_2 IV_3 if industry== `i' & year==`y'
>> predict f
>> predict r, resid
>> replace fitted= f if industry== `i' & year==`y'
>> replace resi = r if industry== `i' & year==`y'
>> }
>> }
>>
>> f already defined r(110);
>>
>>
>> forval y=1989/2012 {
>> forval i= 1/55 {
>> reg DV IV_1 IV_2 IV_3 if industry== `i' & year==`y'
>> predict f if industry== `i' & year==`y'
>> predict r if industry== `i' & year==`y', resid
>> }
>> }
>>
>> f already defined r(110);
>>
>>
>>
>> gen fitted=.
>> gen resi =.
>> forval y=1989/2012 {
>> forval i= 1/55 {
>> reg DV IV_1 IV_2 IV_3 if industry== `i' & year==`y'
>> predict f `i' `y'
>> predict r `i' `y', resid
>> replace fitted= f if industry== `i' & year==`y'
>> replace resi = r if industry== `i' & year==`y'
>> }
>> }
>> varlist not allowed r(101);
>>
>>
>>
>> gen fitted=.
>> gen resi =.
>> forval y=1989/2012 {
>> forval i= 1/55 {
>> reg DV IV_1 IV_2 IV_3 if industry== `i' & year==`y'
>> predict f if `i' `y'
>> predict r if `i' `y', resid
>> replace fitted= f if industry== `i' & year==`y'
>> replace resi = r if industry== `i' & year==`y'
>> }
>> }
>>
>> invalid '1989' r(198);
>>
>>
>>
>> Thank you, your help is highly appreciated
>>
>> Nahla Betelmal
>> *
>> * For searches and help try:
>> * http://www.stata.com/help.cgi?search
>> * http://www.stata.com/support/faqs/resources/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/faqs/resources/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/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/