mata: mata clear
version 10.1
mata: mata set matastrict on
mata:
// indcorr 1.0.0  CFBaum 11aug2008
void function indcorr(string scalar ind, 
                      string scalar vn,
                      string scalar newvar)
{
	real matrix pdata, info, highcorr, sigma, z, enn, w
	real vector muret, ret
	real scalar nf, nv, nv1, i, imax
	string scalar mu, maxc, enname
	st_view(ind, ., ind)
	st_view(pdata, ., tokens(vn))
	info = panelsetup(ind, 1)
	nf = rows(info)
	nv = cols(pdata)
	nv1 = nv-1
	maxc = newvar + "max"
	st_view(highcorr, 1::nf, maxc)
	mu = newvar + "mu"
	st_view(muret, 1::nf, mu)
	enname = newvar + "n"
	st_view(enn, 1::nf, enname)
// compute correlations between index columns and last column (ret)
	for(i = 1; i <= nf; i++) {
		sigma = correlation(panelsubmatrix(pdata, i, info))
		ret = sigma[nv,  1::nv1]		
		maxindex(ret, 1, imax, w)
		highcorr[i] = imax	
// calculate mean return and number of quotes for this panel
		z = panelsubmatrix(pdata[.,nv], i, info)
		muret[i] = mean(z)
		enn[i] = rows(z)
	}
}
end

mata: mata mosave indcorr(), dir(PERSONAL) replace