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: using loops in collapse command
From
Nick Cox <[email protected]>
To
[email protected]
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
<[email protected]> 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 <[email protected]> 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
>> <[email protected]> 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 <[email protected]>:
>>>> 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/