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   Nick Cox <[email protected]>
To   [email protected]
Subject   Re: st: using loops in collapse command
Date   Mon, 2 Apr 2012 19:38:53 +0100

You don't need -collapse-. But you could look at -lastnm-. Or

drop if mi(value1)
bysort id year : gen double product = exp(sum(ln(value1)))
by id year : keep if _n == _N

By the way,

bysort id year (date)

is overkill if you only want the last value. The final product doesn't
depend on the order of its arguments.

Nick

On Mon, Apr 2, 2012 at 7:30 PM, Jocelyn Michael
<[email protected]> wrote:
> 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/


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