*! kornbrot -- Kornbrot's rank difference test (STB-29: snp9) program define kornbrot version 4.0 local varlist "req ex max(1)" local exp "req noprefix" local if "opt" local in "opt" parse "`*'" tempvar score rank ranka rankb touse id if "`exp'" ~= "" { unabbrev `exp' } preserve quietly { mark `touse' `if' `in' markout `touse' `varlist' `exp' drop if `touse'==0 } quietly { su `varlist' local en _result(1) gen `id'=_n expand=2 gen `score'=`varlist' replace `score'=`exp' if _n>`en' egen `rank'=rank(`score') replace `rank'=((2*`en')+1) - `rank' gen `ranka'=`rank' if `varlist'==`score' gen `rankb'=`rank' if `exp'==`score' sort `id' `ranka' replace `rankb'=`rankb'[_n+1] if `rankb'==. drop if `ranka'==. } signrank `ranka'=`rankb' end