Statalist The Stata Listserver


[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: RE: a question about making a tabel using STATA


From   Jian Zhang <[email protected]>
To   [email protected]
Subject   Re: st: RE: a question about making a tabel using STATA
Date   Mon, 27 Feb 2006 17:45:52 -0800 (PST)

Thanks, Neil and Nick! Your answers are really helpful!

Best,

Jian Zhang

On Sun, 26 Feb
2006, Nick Cox wrote:

> I can't speak for STATA. The program I know
> is called Stata. Please read the Statalist
> FAQ before posting to be familiar with the
> advice given.
>
> Specific answers below.
>
> Nick
> [email protected]
>
> Jian Zhang
>
> > Dear STATA users,
> >
> > I have a question about making a table using STATA.  I
> > couldn't figure out
> > how to make it. Hope that you could help me.
> >
> > The table that I need has the following format:
> >
> >         	group1	group2 	group3
> > variabel 1
> > variabel 2
> > variabel 3
> >
> > The celles are filled with variable means for each group and for each
> > varialbe. For example, the first cell (row 1 and column 1) is
> > the mean of variable 1 for group 1.
> >
> > I know that I can use command table to make the following table:
> >
> > table group, by(mean variable1 mean variable2 mean variable3)
> >
> > 	variable1 	variable2	variable3
> > group1
> > group2
> > group3
> >
> >
> > Since I have so many variables and groups, it would take too
> > much time to
> > convert the format of the secon table to that of the first table
> > manually. I wonder if there is a shortcut way in which I
> > could directly
> > generate the first table?
>
> I can't find anything to do precisely this. Here's a quick
> and dirty program to do it. It's not especially smart about
> row or column labels. Watch for wrapped lines in copying.
>
> *! NJC 1.0.0 26 Feb 2006
> program meantable
> 	version 8.2
> 	syntax varlist(numeric) [if] [in] [, by(varname) format(str) stat(str) ]
>
> 	quietly {
> 		marksample touse
> 		if "`by'" != "" markout `touse' `by', strok
> 		count if `touse'
> 		if r(N) == 0 error 2000
>
> 		if "`by'" != "" {
> 			levels `by' if `touse', clean local(levels)
> 			local levels : subinstr local levels "." " ", all
> 		}
> 		else {
> 			tempvar by
> 			gen byte `by' = 1
> 			local levels "all"
> 		}
>
> 		local nstat : word count `stat'
> 		if `nstat' >= 2 {
> 			di as err "single statistics only in stat()"
> 			exit 198
> 		}
>
> 		tempvar group
> 		egen `group' = group(`by') if `touse'
> 		su `group', meanonly
> 		local c = r(max)
> 		numlist "1/`c'"
> 		local safelevels "`r(numlist)'"
> 		local r : word count `varlist'
> 		tokenize `varlist'
> 		tempname tmatrix
> 		mat `tmatrix' = J(`r', `c', .)
>
> 		if "`stat'" == "" local stat "mean"
> 		if inlist("`stat'", "N", "sum_w", "sum", "mean", "min", "max") {
> 			local opt "meanonly"
> 		}
> 		else if inlist("`stat'", "skewness", "kurtosis") {
> 			local opt "detail"
> 		}
> 		else if inlist("`stat'", "p1", "p5", "p10", "p25", "p50", "p75", "p90", "p95", "p99") {
> 			local opt "detail"
> 		}
>
> 		forval j = 1/`c' {
> 			forval i = 1/`r' {
> 				su ``i'' if `group' == `j', `opt'
> 				matrix `tmatrix'[`i', `j'] = r(`stat')
> 			}
> 		}
>
> 		matrix rownames `tmatrix' = `varlist'
> 		capture matrix colnames `tmatrix' = `levels'
> 		if _rc matrix colnames `tmatrix' = `safelevels'
> 		if "`format'" == "" local format "%4.3f"
> 	}
>
> 	mat li `tmatrix', format(`format') noheader
> end
>
> . sysuse auto, clear
> (1978 Automobile Data)
>
> . meantable mpg
>
>         all
> mpg  21.297
>
> . meantable mpg, by(rep78)
>
>           1       2       3       4       5
> mpg  21.000  19.125  19.433  21.667  27.364
>
> . meantable mpg turn trunk , by(rep78)
>
>             1       2       3       4       5
>   mpg  21.000  19.125  19.433  21.667  27.364
>  turn  41.000  43.375  41.067  38.500  35.636
> trunk   8.500  14.625  15.267  13.500  11.455
>
> . meantable mpg turn trunk , by(rep78)  format(%2.1f)
>
>           1     2     3     4     5
>   mpg  21.0  19.1  19.4  21.7  27.4
>  turn  41.0  43.4  41.1  38.5  35.6
> trunk   8.5  14.6  15.3  13.5  11.5
>
> . meantable mpg turn trunk , by(rep78)  format(%4.3f) stat(skewness)
>
> . meantable mpg turn trunk , by(rep78)  format(%4.1f)  stat(p50)
>
>           1     2     3     4     5
>   mpg  21.0  18.0  19.0  22.5  30.0
>  turn  41.0  43.5  42.0  37.0  36.0
> trunk   8.5  16.0  16.0  13.5  11.0
>
> > A related question is that: is there an option in command table or in
> > other commands that we could automatically indicate the statistical
> > signifance of the difference between groups for same variables on the
> > tables? I looked through the help file for command table and
> > did not find
> > such options.  Do I need to use command ttest for each group
> > and for each
> > variable and then manually indicate the statistical
> > significance on the table?
>
> Occasionally there are options that are not documented. In the
> case of -table- no such option exists. I don't know how a set of
> results for all possible pairwise t tests would be compatible
> with the table structure you seek and in any case it would be
> very poor statistical practice, especially as you seem most
> interested in getting at the significance level. You need
> to read up on problems of multiplicity in hypothesis testing.
>
> *
> *   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/
>
*
*   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/



© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index