Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# Re: st: using loops in collapse command

 From Jocelyn Michael To statalist@hsphsun2.harvard.edu Subject Re: st: using loops in collapse command Date Mon, 2 Apr 2012 13:29:09 -0400

```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.

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/

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