#delimit ; program define tidot; version 5.0; * Take, as input, 2 variables in varlist, and, optionally, a grouping variable in option Group. Create, as output, a variable in option Tidot, containing concordance-discordance difference counts between the two variables in varlist. This program allows fweights. *; local varlist "required existing min(2) max(2)"; local weight "fweight"; local options "Group(string) Tidot(string)"; parse "`*'"; local y: word 1 of `varlist';local x:word 2 of `varlist'; * Create group and tidot variables *; local tidot:word 1 of `tidot';local group: word 1 of `group'; if("`group'"==""){tempvar group;gene byte `group'=1;}; if("`tidot'"==""){tempvar tidot;disp in green "Warning: no tidot variable";}; * Calculate concordance-discordance counts in `tidot'; quietly{ tempname xcur ycur gcur;tempvar tij; quietly{capture drop `tidot';gene `tidot'=.;gene `tij'=.;}; local i1=0; quietly while(`i1'<_N){local i1=`i1'+1; scal `gcur'=`group'[`i1'];scal `ycur'=`y'[`i1'];scal `xcur'=`x'[`i1']; if((`xcur'!=.)&(`ycur'!=.)){ replace `tij'=.; replace `tij'=sign(`x'-`xcur')*sign(`y'-`ycur') if(`group'==`gcur'); summarize `tij' [`weight'`exp'],meanonly; replace `tidot'=_result(18) if(_n==`i1'); }; }; end;