Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Nick Cox <njcoxstata@gmail.com> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: Index |
Date | Thu, 12 Jan 2012 11:25:12 +0000 |
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/