program mkcorr, byable(recall) syntax varlist [if] [in],Log(string) [Replace] [CDec(integer 2)] [MDec(integer 3)] [Means] [Sig] [Num] [Label] /// [NOCorr] [CASEwise] version 8.0 *! Author: Glenn Hoetker *! Date: 08Mar2014 *! Version: 2.0.1 /* Version history 1.0 (03 September 2003) Initial release 1.1 (15 September 2003) Bug fixes and feature additions * Rewrote to avoid use of preserve/restore to speed up the code * Fixed a bug that could calcuate the significance value on a different set of observations than the correlations as a whole. * Fixed two typos in the help file (mdec, not mdeq. cdec, not cdeq) * Added "nocorr" option to allow for just producing summary stats 1.2 (17 September 2003) * Added code so that log(foo.log) will generate foo.log, not foo.log.log * Added code to handle situation in which some, but not all labels exist * Removed unnecessary definition of local variables rho and n * Fixed some spelling errors in the help file. 1.3 (7 October 2003) * Fixed code to allow use to specify her own file suffix. log(foo.out) now generates the file foo.out, not foo.out.log. * Fixed code to allow users to specify a path as part of the logfile. * Fixed code to allow users to specify a logfile name that includes a space. 2.0 (17 November 2005) Significant upgrade/bug fix * Fixed code to appropriately handle pairwise deletion. That is, unless "casewise" is specified, the results will duplicate those produced by "pwcorr". This also addresses a problem that could arise with calculated significance values. They are now accurate. 2.0.1 (8 March 2014) Updated author contact information in help file. */ /* Macros */ local width=`cdec'+2 local cformat "%`width'.`cdec'f" local mformat "%9.`mdec'f" tempname output tempvar touse local n_rows:list sizeof varlist local n_cols: list sizeof varlist //Limit the sample to those with observations for all vars if CASEwise selected if "`casewise'"~="" { marksample touse if "`if'"~="" { local if="`if'" + " & \`touse'" } else { local if "if \`touse'" } } //Open and write to the file. if index(`"`log'"',".")>0 { local logname `log' } else { local logname `log'.log } file open `output' using `"`logname'"', write text `replace' //The labels across the top file write `output' _tab if "`num'"~="" file write `output' _tab if "`means'"~="" { file write `output' "Mean" _tab "S.D." _tab "Min" _tab "Max" _tab } //Put either variable names or numbers if "`nocorr'"=="" { if "`num'"=="" { foreach var of local varlist{ local lab: variable label `var' if "`label'"=="" | `"`lab'"'=="" { local lab `var' } file write `output' "`lab'" _tab } } else { forvalues x=1/`n_cols' { file write `output' "(" (`x') ")" _tab } } } file write `output' _n //Output rows of the matrix one at a time, starting with the variable name and then the values forvalues row=1/`n_rows' { //The number of the variable, if requested by NUM if "`num'"~="" { file write `output' "(" (`row') ")" _tab } //The variable name local var: word `row' of `varlist' local lab: variable label `var' if "`label'"=="" | `"`lab'"'==""{ local lab `var' } file write `output' "`lab'" _tab //The values //If we are putting in means if "`means'"~="" { quietly summarize `var' `if' `in' file write `output' `mformat' (`r(mean)') _tab /// `mformat' (`r(sd)') _tab `mformat' (`r(min)') _tab `mformat' (`r(max)') _tab } //Correlations if "`nocorr'"=="" { forvalues col=1/`row' { //Notice that we are only doing the bottom half local var1:word `row' of `varlist' local var2:word `col' of `varlist' qui corr(`var1' `var2') `if' `in' local val=r(rho) file write `output' `cformat' (`val') _tab } file write `output' _n //Put in the significance in the next row, if requested if "`sig'"~="" { file write `output' _tab if "`means'"~="" { file write `output' _tab(4) } if "`num'"~="" { file write `output' _tab } forvalues col=1/`row' { local var1:word `row' of `varlist' local var2:word `col' of `varlist' if "`row'"=="`col'" { file write `output' "" _tab } else { qui correlate `var1' `var2' `if' `in' local rho=`r(rho)' local n=`r(N)' local p=min(tprob(r(N)-2,r(rho)*sqrt(r(N)-2)/sqrt(1-r(rho)^2)),1) file write `output' "(" `cformat' (`p') ")" _tab } } file write `output' _n } } else file write `output' _n } file close `output' end