# st: Calculating Borda Count within group

 From philippe.vankerm@ceps.lu To statalist@hsphsun2.harvard.edu Subject st: Calculating Borda Count within group Date Thu, 22 Apr 2004 16:26:44 +0200

```Tonya,

As an alternative to what Stephen Jenkins suggested, what abour stg like

foreach var of varlist pd1 pl1 pu1 {
by grpid: gen r`var' = sum((max(`var',pd1)==`var') +
(max(`var',pl1)==`var') + (max(`var',pu1)==`var'))
}
by grpid: gen borda = (max(rpd1[_N],rpl1[_N],rpu1[_N])==rpd1[_N])  if
_n==_N
tab borda

* or is it as follows - I'm not too sure I understand clearly what you
want:
bys grpid: gen bordaBIS =
(max(rpd1[_N],rpl1[_N],rpu1[_N])==rpd1[_N])==death  if _n==_N
tab bordaBIS

Philippe

>>>>>>>>>>>>>

From
"Tonya Cropper" <tonya_cropper@ksgphd.harvard.edu>
To
"Statalist" <statalist-digest@hsphsun2.harvard.edu>
Subject
st: Calculating Borda Count within group
Date
Thu, 22 Apr 2004 09:22:17 -0400

Dear Statalisters:

I wrote a program to calculate a Borda count result of predicted
probabilities of people within groups.  The program calculates the results
I
want, but I am hoping there's a more efficient way of doing it.  Within
each
group, I want to rank each person's predicted probability for three
outcomes(Pd, Pl, Pu). I have multiple sets of these probabilites based on
different models, so I performed the counts in a loop.  I gave each person
a
score of 3 for the highest probability, 2 for the 2nd, and 1 for the
lowest.
I then summed each outcome to get a total Borda score.  If Pd was the
highest score, then the Borda result is 1 and 0 otherwise (I mainly care
about Pd, ties will go to Pl, Pu is undecided).  Below is an example.  I
will appreciate any assistance to streamline the program.  Thank you.

Pd1    Pl1    Pu1    death
id1    .275    .401    .324    0
id2    .582    .163    .255    0
id3    .072    .630    .298    0
id4    .489    .064    .446    0
id5    .242    .400    .358    0

Borda ranking result :
Pd1    Pl1    Pu1
id1    1        3        2
id 2   3        1        2
id3    1        3        2
id4    3        1        2
id5    1        3        2
Borda count:9    11     10
result/borda1 = 0
success =1 (since death=board1)

*** Borda Count **
gen rPd`i'=0
gen rPl`i'=0
gen rPu`i'=0

local i=1
while i<= 3 {
if (Pd`i'>Pl`i') & (Pl`i'>Pu`i') {
replace rPd`i'=3
replace rPl`i'=2
replace rPu`i'=1
}
else if (Pd`i'>Pu`i') & (Pu`i'>Pl`i') {
replace rPd`i'=3
replace rPl`i'=1
replace rPu`i'=2
}
else if (Pl`i'>Pd`i') & (Pd`i'>Pu`i') {
replace rPd`i'=2
replace rPl`i'=3
replace rPu`i'=1
}
else if (Pl`i'>Pu`i') & (Pu`i'>Pd`i') {
replace rPd`i'=2
replace rPl`i'=1
replace rPu`i'=3
}
else if (Pu`i'>Pd`i') & (Pd`i'>Pl`i') {
replace rPd`i'=1
replace rPl`i'=3
replace rPu`i'=2
}
else if (Pu`i'>Pl`i') & (Pl`i'>Pd`i') {
replace rPd`i'=1
replace rPl`i'=2
replace rPu`i'=3
}
}
collapse (sum)rPd1 rPl1 rPu1 (sum)rPd1 rPl1 rPu1 (sum)rPd1 rPl1 rPu1
(mean)death if (ngrp>2), by(grpid)
gen borda1= ((rPd1>rPl1) & (rPd1>rPu1))
gen borda2= ((rPd2>rPl2) & (rPd2>rPu2))
gen borda3= ((rPd3>rPl3) & (rPd3>rPu3))
gen borda1s:"Borda Count/Prob 1 Success" = (death==borda1)
tab borda1s, miss

**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
the system manager.

This footnote also confirms that this email message has been swept for the presence of computer viruses.

**********************************************************************

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```