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: using loops in collapse command


From   Jocelyn Michael <[email protected]>
To   [email protected]
Subject   Re: st: using loops in collapse command
Date   Mon, 2 Apr 2012 14:30:49 -0400

Thank you Nick. That worked! Thanks also for the tip about working
around missing values.

As a follow up: How do I collapse the different numbers for the years
leaving only one id for one year with one value1?

When I do collapse, it takes the mean but thats not what I want.

Thanks

J.

On Mon, Apr 2, 2012 at 1:37 PM, Nick Cox <[email protected]> wrote:
> %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/

*
*   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–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index