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]

From |
"Pavlos C. Symeou" <p.symeou@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Index |

Date |
Thu, 12 Jan 2012 22:53:55 +0200 |

Dear Antonie and Nick,

Thank you again, Pavlos On 12/1/2012 1:25 μμ, Nick Cox wrote:

One solution has been suggested by Antonis Loumiotis. I am replying to the original which keeps the text of the question. First I would write a little Mata function mata : void symeou_index(real colvector m, real colvector s, string scalar iname) { real scalar s_index, n, i, j s_index = 0 n = rows(m) for(i = 1; i< n; i++) { for(j = i + 1; j<= n; j++) { s_index = s_index + (m[i] == m[j] ? s[i] * s[j] : 2 * s[i] * s[j]) } } st_numscalar(iname, s_index) } end Then you need to load that, e.g. by putting it in a do-file and running that do-file. input firm year market sales 1 1990 1 1 1 1991 1 1 1 1992 2 .3 1 1992 2 .1 1 1992 3 .15 1 1992 2 .15 1 1992 3 .15 1 1992 4 .15 1 1993 4 .40 1 1993 4 .20 1 1993 5 .40 2 1990 1 1 2 1991 1 1 2 1992 2 .3 2 1992 2 .1 2 1992 3 .15 2 1992 2 .15 2 1992 3 .15 2 1992 4 .15 2 1993 4 .40 2 1993 4 .20 2 1993 5 .40 end egen group = group(firm year) su group, meanonly local ng = r(max) gen thisuse = 0 gen index = . quietly forval i = 1/`ng' { replace thisuse = group == `i' mata : work = st_data(., ("market", "sales"), "thisuse") mata : symeou_index(work[,1], work[,2], "result") replace index = scalar(result) if group == `i' } Nick On Wed, Jan 11, 2012 at 3:16 PM, Pavlos C. Symeou<p.symeou@gmail.com> wrote:I have a number of companies for a number of years and each company sells its products in a number of markets in a year. For each market, I have the value of its sales (a proportion relative to the overall sales for the company in a year). I am interested in calculating an index for each company-year as following: 1) for each company-year I must compare each market with each other. If the two markets are the same I take their product and multiply it by 1. If the two markets are not the same, I take their product and multiply them by 2. The index should be the sum of all products. From the example data below, the Index for Firm 1 in Year 1993 should be: (0.4 * 0.2 * 1) + (0.4 * 0.4 * 2) + (0.2 * 0.4 * 2) = 0.56 DATA Firm Year Market Market_sales Index 1 1990 1 1 1 1991 1 1 1 1992 2 .3 1 1992 2 .1 1 1992 3 .15 1 1992 2 .15 1 1992 3 .15 1 1992 4 .15 1 1993 4 .40 1 1993 4 .20 1 1993 5 .40 2 1990 1 1 2 1991 1 1 2 1992 2 .3 2 1992 2 .1 2 1992 3 .15 2 1992 2 .15 2 1992 3 .15 2 1992 4 .15 2 1993 4 .40 2 1993 4 .20 2 1993 5 .40* * 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/

**Follow-Ups**:**Re: st: Index***From:*Nick Cox <njcoxstata@gmail.com>

**References**:**st: Index***From:*"Pavlos C. Symeou" <p.symeou@gmail.com>

**Re: st: Index***From:*Nick Cox <njcoxstata@gmail.com>

- Prev by Date:
**st: data cleaning using online spelling check: Radyakin’s -google- command** - Next by Date:
**st: legend with assplot()** - Previous by thread:
**Re: st: Index** - Next by thread:
**Re: st: Index** - Index(es):