program define _gcorr *! v1.2 gmh jun 5 2001 gettoken type 0 : 0 gettoken vn 0 : 0 gettoken eqs 0 : 0 syntax varlist(min=2 max=2) [if] [in] [, BY(string)] if `"`by'"' ~="" { local by = "by(`by') " } gettoken var1 varlist:varlist gettoken var2 varlist:varlist tempvar cross m1 m2 touse cnt sd1 sd2 mark `touse' `if' `in' markout `touse' `var1' `var2' qui egen `type' `m1'=mean(`var1') if `touse' , `by' qui egen `type' `m2'=mean(`var2') if `touse', `by' qui egen `type' `cross'=mean(`var1'* `var2') if `touse', `by' qui egen `cnt'=sum(`touse'), `by' qui egen `type' `sd1'=sd(`var1') if `touse', `by' qui egen `type' `sd2'=sd(`var2') if `touse', `by' * dof correction qui gen `type' `vn'= `cnt'/(`cnt'-1)* (`cross'-`m1'*`m2')/(`sd1'*`sd2') end