Bookmark and Share

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: FORVAL loop incomplete


From   Nick Cox <[email protected]>
To   "[email protected]" <[email protected]>
Subject   Re: st: FORVAL loop incomplete
Date   Mon, 11 Nov 2013 16:32:33 +0000

The fix is another way to do the same thing.

destring gvkey, replace

egen id = group(gvkey), label

gen date = yq(year, fqtr)

tsset id date, quarterly

su id, meanonly

*create file to contain new appended variable

*save new

g Z14 = .
g Z24 = .
g Z34 = .
g Z4t = .
g Z3t = .
g Z2t = .
g Z1t = .

forval i = 1/`r(max)' {
srootfix fcf if id == `i'
return list
ereturn list
replace Z14 = r(Z14) in `i'
replace Z24 = r(Z24) in `i'
replace Z34 = r(Z34) in `i'
replace Z4t = r(Z4t) in `i'
replace Z3t = r(Z3t) in `i'
replace Z2t = r(Z2t) in `i'
replace Z1t = r(Z1t) in `i'
append using new
}
Nick
[email protected]


On 11 November 2013 14:10, Francis, Richard N <[email protected]> wrote:
> Hi Sergiy,
>
> This is a follow-up to your suggestion for a "fix pgm" associated with an SJ pgm "sroot" ...
>
> My original pgm looks like this:
>
> destring gvkey, replace
>
> egen id = group(gvkey), label
>
> gen date = yq(year, fqtr)
>
> tsset id date, quarterly
>
> su id, meanonly
>
> *create file to contain new appended variable
>
> *save new
>
> g Z14 = .
> g Z24 = .
> g Z34 = .
> g Z4t = .
> g Z3t = .
> g Z2t = .
> g Z1t = .
>
> forval i = 1/`r(max)' {
>     preserve
>     keep if id == `i'
>     sroot fcf
>         return list
>         ereturn list
>         replace Z14 = r(Z14) in `i'
>         replace Z24 = r(Z24) in `i'
>         replace Z34 = r(Z34) in `i'
>         replace Z4t = r(Z4t) in `i'
>         replace Z3t = r(Z3t) in `i'
>         replace Z2t = r(Z2t) in `i'
>         replace Z1t = r(Z1t) in `i'
>         append using new
>     restore
>
> }
>
> Then you suggested "a fix" the inability of sroot to handle the if qualifier as follows:
>
> *! By Sergiy Radyakin, 2013
> *! Fixes problem of -if- modifier [suspected] not working in public (SJ) version of -sroot-.
> ** See http://www.stata.com/statalist/archive/2013-11/msg00366.html
>
> program define srootfix
>    version 9.2
>    syntax varname(ts) [if] [in] ,[*]
>    preserve
>    marksample touse
>    keep if `touse'
>    sroot `varlist' , `options'
> end
>
> ** end of file **
>
>
> BIGGG question for ME is where/how will I incorporate "the fix" into my original pgm?
>
> Before the loop (if so, where in the loop)?
>
> In the loop (if so, where in the loop)?
>
> After the loop?
>
> Thanks so much for your insight!!
>
>
> Rick Francis
>
>
>
>
>
>
>
>
>
>
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf Of Sergiy Radyakin
> Sent: Saturday, November 09, 2013 11:40 AM
> To: [email protected]
> Subject: Re: st: FORVAL loop incomplete
>
> Nick, sorry I missed your message and I trusted sroot was cleared/tested. That explains a lot, but still I would isolate the problem within sroot, and keep my program clear from any crunches to handle sroot's problem. A quick fix could be something like this:
>
> http://radyakin.org/statalist/2013110901/srootfix.ado
>
> Now Rick can call srootfix instead of sroot in the loop I provided. If sroot ever gets fixed, Rick would replace that call from srootfix to sroot directly. If Rick routinely uses sroot, srootfix might become reusable in multiple projects.
> It may take like 10 more minutes to produce an automatic srootfix that would detect the version of sroot and decide whether to call it directly or use preserve, but I doubt anyone needs this level of automation.
>
> Best, Sergiy Radyakin
>
>
>
> On Sat, Nov 9, 2013 at 9:57 AM, Nick Cox <[email protected]> wrote:
>> An earlier thread established that -sroot- (SJ) does not support -if-
>> correctly. That's the entire point of the work-around being used here.
>> Nick
>> [email protected]
>>
>>
>> On 9 November 2013 17:52, William Buchanan <[email protected]> wrote:
>>> Hi Rick,
>>>
>>> I've adjusted some of your code below based on the information that you've provided to the listserv:
>>>
>>> destring gvkey, replace
>>>
>>> encode gvkey, gen(id)
>>>
>>> gen date = yq(year, fqtr)
>>>
>>> tsset id date, quarterly
>>>
>>> g Z14 = .
>>> g Z24 = .
>>> g Z34 = .
>>> g Z4t = .
>>> g Z3t = .
>>> g Z2t = .
>>> g Z1t = .
>>>
>>> su id, meanonly
>>>
>>> forval i = 1/3 {
>>>    sroot fcf if id==`i'
>>>         replace Z14 = r(Z14) if id== `i'
>>>         replace Z24 = r(Z24) if id== `i'
>>>         replace Z34 = r(Z34) if id== `i'
>>>         replace Z4t = r(Z4t) if id==`i'
>>>         replace Z3t = r(Z3t) if id==`i'
>>>         replace Z2t = r(Z2t) if id== `i'
>>>         replace Z1t = r(Z1t) if id== `i'
>>> }
>>>
>>> You could also take Sergiy's suggestion and store everything in matrices, and if you wanted you could easily modify the user-written program around line 306 to store all of the values in a matrix that you could return in the same way as the scalars that you are referencing here.  If you wanted to create a new dataset based on the results, you could possibly modify the program to make it byable and use -statsby-, or you could check out -post- and -postfile- commands to store the results to another file.
>>>
>>> HTH,
>>> Billy
>>> On Nov 9, 2013, at 10:41 AM, "Francis, Richard N" <[email protected]> wrote:
>>>
>>>> Hi Sergiy,
>>>>
>>>> Thank you for taking time out of your day for such a novice issue.
>>>>
>>>> The entire pgm looks like this:
>>>>
>>>>
>>>> destring gvkey, replace
>>>>
>>>> egen id = group(gvkey), label
>>>>
>>>> gen date = yq(year, fqtr)
>>>>
>>>> tsset id date, quarterly
>>>>
>>>> su id, meanonly
>>>>
>>>> g Z14 = .
>>>> g Z24 = .
>>>> g Z34 = .
>>>> g Z4t = .
>>>> g Z3t = .
>>>> g Z2t = .
>>>> g Z1t = .
>>>>
>>>> forval i = 1/`r(max)' {
>>>>    preserve
>>>>    keep if id == `i'
>>>>    sroot fcf
>>>>       return list
>>>>       ereturn list
>>>>       replace Z14 = r(Z14) in `i'
>>>>       replace Z24 = r(Z24) in `i'
>>>>       replace Z34 = r(Z34) in `i'
>>>>       replace Z4t = r(Z4t) in `i'
>>>>       replace Z3t = r(Z3t) in `i'
>>>>       replace Z2t = r(Z2t) in `i'
>>>>       replace Z1t = r(Z1t) in `i'
>>>>       append using new
>>>>    restore
>>>> }
>>>>
>>>> R(max) immediately prior to the FORVAL loop is three (3), but I'm not sure this is what you are looking for in your first comment.
>>>>
>>>> Does this help at all?
>>>>
>>>> Again, thank you!
>>>>
>>>> Rick Francis
>>>>
>>>> -----Original Message-----
>>>> From: [email protected]
>>>> [mailto:[email protected]] On Behalf Of Sergiy
>>>> Radyakin
>>>> Sent: Saturday, November 09, 2013 9:28 AM
>>>> To: [email protected]
>>>> Subject: Re: st: FORVAL loop incomplete
>>>>
>>>> Rick,
>>>> 1) N may be 180, but what is r(max)? In Stata r(max) is the result of the previous command [of r-class]. You don't show us this command.
>>>> Please do.
>>>> 2) The combination of "append using new" and "restore" does not make sense, Whatever you append you immediately lose.
>>>> 3) If append is meant to add one observation where you are saving
>>>> the results (dataset new is a blank one observation of the same
>>>> layout as the current dataset), consider using: expand in _N
>>>> 4) If you want to accumulate the results of your tests, consider using a matrix to hold the results, and avoid modifying the data.
>>>> Best, Sergiy
>>>>
>>>> On Sat, Nov 9, 2013 at 8:14 AM, Francis, Richard N <[email protected]> wrote:
>>>>> I'm sorry, N = 180 obs, currently cycles through the first 60 (3 groups of 60 =180 total obs).
>>>>>
>>>>> Thank you!!
>>>>>
>>>>> Rick Francis
>>>>>
>>>>> -----Original Message-----
>>>>> From: [email protected]
>>>>> [mailto:[email protected]] On Behalf Of Nick Cox
>>>>> Sent: Saturday, November 09, 2013 9:08 AM
>>>>> To: [email protected]
>>>>> Subject: Re: st: FORVAL loop incomplete
>>>>>
>>>>> Tell us what r(max) is.
>>>>> Nick
>>>>> [email protected]
>>>>>
>>>>>
>>>>> On 9 November 2013 15:53, Francis, Richard N <[email protected]> wrote:
>>>>>> Hello Statalist,
>>>>>>
>>>>>> Have a simple FORVAL loop which should result in multiple cycles.
>>>>>>
>>>>>> However, she only cycles once. I'm sure the answer is obvious to experienced Stata users (which I am not).
>>>>>>
>>>>>> The loop is as follows:
>>>>>>
>>>>>>
>>>>>> forval i = 1/`r(max)' {
>>>>>>    preserve
>>>>>>    keep if id == `i'
>>>>>>    sroot fcf
>>>>>>               return list
>>>>>>               ereturn list
>>>>>>               replace Z14 = r(Z14) in `i'
>>>>>>               replace Z24 = r(Z24) in `i'
>>>>>>               replace Z34 = r(Z34) in `i'
>>>>>>               replace Z4t = r(Z4t) in `i'
>>>>>>               replace Z3t = r(Z3t) in `i'
>>>>>>               replace Z2t = r(Z2t) in `i'
>>>>>>               replace Z1t = r(Z1t) in `i'
>>>>>>               append using new
>>>>>>    restore
>>>>>> }
>>>>>>
>>>>>> I am grateful for any thoughts anyone may have.
>>>>>>
>>>>>> Thank you!!
>>>>>>
>>>>>> Rick Francis
>>>>>>
>>>>>> *
>>>>>> *   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/
>>>> *
>>>> *   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/
>>
>> *
>> *   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/

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


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index