program affiliationexposure
version 10
syntax varlist(numeric min=1), ATTRIBute(varlist min=1 max=1) RESult(name)

capture matrix drop AE
*load the data
mkmat `varlist' `attribute', matrix(AE)
*Cleanup missing values --> 0
mata: m=editmissing(st_matrix("AE"),0); 
mata: Y=m[.,(cols(m))]; A=m[.,1..(cols(m)-1)];   
*calculate Affinity Exposure
mata: C=A*A';
mata: _diag(C,0);
mata: rs=rowsum(C);
mata: ev = (C*Y) :/ rs;
*save to workspace
capture drop RES_AE* `result'
mata: st_matrix("RES_AE",ev)
svmat RES_AE
rename RES_AE `result'
*cleanup memory
matrix drop AE
end