* rename NJC 3 September 2015 *! 1.2.1 NJC 14 August 2001 * 1.2.0 NJC 25 April 2001 * 1.1.1 NJC 24 April 2001 * 1.1.0 NJC 28 February 2001 program define cpcorr6 version 6.0 capture syntax varlist [if] [in] [aweight fweight] /* */ [, Covariance Square Matrix(str) Header Format(str) * ] * if this syntax fails, try that with slash local slash = _rc if `slash' { gettoken rowvars 0 : 0, parse("\") unab rowvars : `rowvars' local nrow : word count `rowvars' gettoken bs 0 : 0, parse("\") syntax varlist [if] [in] [aweight fweight] /* */ [, Covariance Square Matrix(str) Header Format(str) * ] } else { local rowvars "`varlist'" local nrow : word count `varlist' } if "`square'" != "" & "`covariance'" != "" { di in r "squaring covariance not allowed" exit 198 } local ncol : word count `varlist' tokenize `varlist' marksample touse if `slash' { markout `touse' `rowvars' } if "`matrix'" == "" { tempname matrix if "`header'" == "" { local nohdr "noheader" } } matrix `matrix' = J(`nrow',`ncol',0) if "`square'" != "" { local square "^2" } if "`format'" == "" { local format "%5.4f" } local i = 1 qui while `i' <= `nrow' { local row`i' : word `i' of `rowvars' local j = 1 while `j' <= `ncol' { corr `row`i'' ``j'' if `touse' [`weight' `exp'] /* */ , `covariance' if "`covariance'" != "" { mat `matrix'[`i',`j'] = (`r(cov_12)') } else mat `matrix'[`i',`j'] = (`r(rho)')`square' local j = `j' + 1 } local i = `i' + 1 } qui count if `touse' di in g "(obs=`r(N)')" mat rownames `matrix' = `rowvars' mat colnames `matrix' = `varlist' mat li `matrix', `options' `nohdr' format(`format') end /* The original syntax was cpcorr rowvarlist \ colvarlist [if] [in] [weight] [, options] After the first -gettoken- `rowvars' should be rowvarlist After the second -gettoken- `bs' should be "\" The syntax is then colvarlist [if] [in] [weight] [, options] Now (1.2.0) we allow also cpcorr varlist [if] [in] [weight] [, options] which yields square matrices. */