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

# Re: st: Running Product Function

 From Yuval Arbel To statalist@hsphsun2.harvard.edu Subject Re: st: Running Product Function Date Mon, 10 Dec 2012 00:06:03 +0200

```Eventually, I improved the system and put:the following commands:

by appt: replace reduct_per=1 if reduct_per==0
by appt: gen y1=exp(sum(ln(reduct_per)))

I got the following table, which is exactly what I need (I don't want
the geometric mean to be set to zero):

. list reduct_per y3 if appt==2862

+---------------------+
| reduct~r         y3 |
|---------------------|
30. |        1          1 |
31. |        1          1 |
32. |        1          1 |
33. |        1          1 |
34. |        1          1 |
|---------------------|
35. |        1          1 |
36. |        1          1 |
37. |        1          1 |
38. |        1          1 |
39. |        1          1 |
|---------------------|
40. |        1          1 |
41. |        1          1 |
42. |        1          1 |
43. |        1          1 |
44. |        1          1 |
|---------------------|
45. |        1          1 |
46. |        1          1 |
47. |        1          1 |
48. |        1          1 |
49. |        1          1 |
|---------------------|
50. |        1          1 |
51. |        1          1 |
52. |        1          1 |
53. |        1          1 |
54. |        1          1 |
|---------------------|
55. |       25         25 |
56. |       25        625 |
57. |       25      15625 |
58. |       25     390625 |
59. |       25    9765625 |
|---------------------|
60. |       25   2.44e+08 |
61. |       25   6.10e+09 |
62. |       25   1.53e+11 |
63. |       25   3.81e+12 |
64. |       25   9.54e+13 |
|---------------------|
65. |       25   2.38e+15 |
66. |       25   5.96e+16 |
+---------------------+

On Sun, Dec 9, 2012 at 11:56 PM, Nick Cox <njcoxstata@gmail.com> wrote:
> That is reasonable if and only if zero is in effect a code for missing
>
> (In terms of your earlier reference, -prod()- is a user-written -egen-
> function which must be installed from
>
> STB-51  dm71  . . . . . . . . . . . .  Calculating the product of observations
>         (help prod if installed)  . . . . . . . . . . . . . . . . . .  P. Ryan
>         9/99    pp.3--4; STB Reprints Vol 9, pp.45--48
>         extension to egen for producing the product of observations
>
> Please remember to explain _where_ you obtained user-written code.)
>
> Nick
>
> On Sun, Dec 9, 2012 at 9:40 PM, Yuval Arbel <yuval.arbel@gmail.com> wrote:
>> I don't have negative values, but I have zeros, in which case I can
>> replace them by one and then take the -ln()-
>>
>> On Sun, Dec 9, 2012 at 11:31 PM, Nick Cox <njcoxstata@gmail.com> wrote:
>>> Oddly enough I was thinking earlier today about how you would
>>> generalise this if any values were not positive.
>>>
>>> If any value is zero, then the product becomes zero; otherwise one
>>> would need to separate out products of -abs()- and -sign()-.
>>>
>>> Nick
>>>
>>> On Sun, Dec 9, 2012 at 9:19 PM, Yuval Arbel <yuval.arbel@gmail.com> wrote:
>>>
>>>> Please ignore my previous e-mails regarding this question
>>>>
>>>> After a short additional search, I found a very nice (and well known)
>>>> trick proposed by Nick Cox to address the problem (which, from some
>>>> reason did not come to my mind):
>>>>
>>>> bysort group : gen prod = sum(ln(x))
>>>> by group : replace prod = exp(prod[_N])
>>>>
>>>> On Sun, Dec 9, 2012 at 11:05 PM, Yuval Arbel <yuval.arbel@gmail.com> wrote:
>>>>> P.S. According to stata's help, the details of the author of the
>>>>> -prod()- function is:
>>>>>
>>>>> Philip Ryan
>>>>> Department of Public Health
>>>>> South Australia
>>>
>>>
>>> On Sun, Dec 9, 2012 at 10:53 PM, Yuval Arbel <yuval.arbel@gmail.com> wrote:
>>>
>>>>>> I appreciate very much your assistance in the following question:,
>>>>>>
>>>>>> I'm looking for an equivalent function for -gen y1=sum()- which will
>>>>>> calculate running product for each point in time
>>>>>>
>>>>>> In fact, what I would like to calculate is a running geometric mean
>>>>>>
>>>>>> Note also that -gen y2=prod()- does not work (i.e., stata does not
>>>>>> identify the function). Only -egen y2=prod()- works, but it generates
>>>>>> only one product for each panel, and this is not what I need.
>>>>>>
>>>>>> Finally, I tried the -amean- command,, but it simply gives summary
>>>>>> statistics of different means, and it is not a function..
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/faqs/resources/statalist-faq/
> *   http://www.ats.ucla.edu/stat/stata/

--
Dr. Yuval Arbel