Stata tech support has confirmed that there is a problem with
-collapse- and the -aweight- option. The problem will be fixed in a
future update.
Friedrich Huebler
--- Friedrich Huebler <[email protected]> wrote:
> Nick,
>
> Thank you for your program. I deleted the previous messages from
> the
> thread so let me restate what I would like to do: I am looking for
> a way to save -tabulate- output (the frequencies and the percent
> values) as a matrix. The program by Nick works with frequency
> weights
> but when analytic weights are used the matrix is different from the
> -tabulate- output.
>
> . sysuse auto
> . tab foreign [aw=weight]
>
> Car type | Freq. Percent Cum.
> ------------+-----------------------------------
> Domestic | 57.1261189 77.20 77.20
> Foreign | 16.8738811 22.80 100.00
> ------------+-----------------------------------
> Total | 74 100.00
>
> . friedrich2 foreign [aw=weight], matrix(mat)
> . mat list mat
>
> mat[2,2]
> freq percent
> Domestic 52 70.270271
> Foreign 22 29.729731
>
> The original program uses -collapse (count)-. I changed this to
> -collapse (sum)- but the result is the same. The -collapse-
> documentation in the Reference Manual explains that with (count)
> the
> unweighted and analytically weighted results are identical. With
> (sum) I expected the unweighted and analytically weighted results
> to
> be different. My copy of the manual has these definitions on page
> 211:
>
> sum:
> unweighted: sum(x_j), the sum of the variable
> aweight: sum(v_j*x_j); v_j = (w_j normalized to sum to _N)
>
> Is my interpretation of the definitions wrong or does -collapse
> (sum)- with analytic weights not do what the manual states?
>
> Friedrich Huebler
>
> --- Nick Cox <[email protected]> wrote:
> > Is this closer to what you want? Not very efficient, so
> > can be much improved.
> >
> > program friedrich2
> > version 8
> > syntax varname [if] [in] [fweight aweight] , matrix(string)
> >
> > preserve
> > tempvar freq
> > gen `freq' = 1
> > collapse (count) `freq' `if' `in' [`weight' `exp'],
> by(`varlist')
> > rename `freq' freq
> > egen percent = pc(freq)
> > mkmat freq percent, mat(`matrix')
> >
> > forval i = 1/`= rowsof(`matrix')' {
> > local name : label (`varlist') `= `varlist'[`i']'
> > if `"`name'"' == "" local name = `varlist'[`i']
> > if `"`name'"' == "." local name "missing"
> > local names `"`names' `"`name'"' "'
> > }
> >
> > matrix rownames `matrix' = `names'
> > end
> >
> >
> > Nick
> > [email protected]
_______________________________
Do you Yahoo!?
Declare Yourself - Register online to vote today!
http://vote.yahoo.com
*
* 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/