Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down at the end of May, and its replacement, statalist.org is already up and running.


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

Re: st: using loops in collapse command


From   Nick Cox <njcoxstata@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: using loops in collapse command
Date   Mon, 2 Apr 2012 18:37:36 +0100

%ty is a format. It won't fit well into this framework. If you are
saying that you want separate products for each individual and year
that would be at root something like

bysort id year (date) : gen double product = exp(sum(ln(value1)))

Evidently you are getting rid of missing values. The thread cited
earlier showed a way of working round them.

Nick

On Mon, Apr 2, 2012 at 6:29 PM, Jocelyn Michael
<michaeljocelyn31@gmail.com> wrote:
> Thank you to all. I have tried the suggested approaches and I am
> almost there. I guess the part I omitted in my question is that I have
> multiple years. So the solutions you have suggested resolve most of
> the issue - but I am still experiencing some problems.
>
> here is what I have done so far:
>
> by id (date), sort:drop if _n==sum(mi(value1))
> sort id date
> gen ym = yofd(date)
> format ym %ty
>
> drop if value1==.
> foreach %ty bysort id gen double product = exp(sum(ln(value1)))
>
> It works properly if I don't have the second restriction of trying to
> sort into years i.e. the (foreach %ty) part.
>
> Thanks for your assistance.
>
> J.
>
> On Mon, Apr 2, 2012 at 11:10 AM, Nick Cox <njcoxstata@gmail.com> wrote:
>> The geometric mean is only usefully defined for strictly positive
>> values. If that is the case, then the solution at
>>
>> http://www.stata.com/statalist/archive/2012-03/msg01142.html
>>
>> is equivalent to this, requires no installed extras and is more direct.
>>
>> Nick
>>
>> On Mon, Apr 2, 2012 at 4:03 PM, Alberto Dorantes
>> <alberto.dorantes@finanzastec.net> wrote:
>>> Hi Michael.
>>> You can install the egenmore function first using findit egenmore.
>>>
>>> Then, you can type:
>>>
>>> egen gm=gmean(value1), by(id)
>>> egen nn=count(value1), by(id)
>>> gen prod=gm^(nn)
>>>
>>> I hope this help...
>>>
>>> Alberto.
>>>
>>> 2012/4/2 Jocelyn Michael <michaeljocelyn31@gmail.com>:
>>>> I am a new stata user and have been trying to write a loop to accomplish a task.
>>>>
>>>> My data looks like this:
>>>>
>>>>
>>>> id                 Year               Value 1
>>>> A               Jan1991             0.92
>>>> A               Feb1991             0.93
>>>> A               Mar1991             0.24
>>>> A               APr1991             0.83
>>>> ..
>>>> ..
>>>> B               Jan1991             0.67
>>>> B               Feb1991             0.45
>>>> ..
>>>>
>>>> What I am trying to achieve is to write a loop that multiplies value1
>>>> for each id and returns one number for each year - sort of like a
>>>> collapse command but instead of the sum, I want the product. That is
>>>> for A for 1991, (0.92*0.93*0.24*0.83).
>>>>

*
*   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   |   Site index