*! version 1.0 06/18/1992 (STB-9: snp4) program define nptrend version 3.0 local varlist "req ex max(1)" local if "opt" local in "opt" local options "BY(string) TRend(string)" parse "`*'" if "`by'"=="" { di in red "You must specify the grouping variable" exit 198 } tempvar score if "`trend'"=="" { gen `score'=`by' } else { gen `score'=`trend' } confirm var `by' confirm new var _RankSum _Obs _Score tempvar RankSum Obs Touse tempvar TStat GScores G2Score tempvar tie dummy quietly { gen byte `Touse'=1 `if' `in' capture confirm string var `by' if _rc { replace `Touse'=. if `by'==. | `varlist'==. } else replace `Touse'=. if `by'=="" | `varlist'==. egen `RankSum' =rank(`varlist') if `Touse'==1 gen long `Obs'=1 if `RankSum'~=. gen `dummy'=1 if `RankSum'!=. sort `RankSum' by `RankSum': gen `tie'= cond(_n==_N,sum(`dummy'),.) replace `tie'=sum(`tie'*(`tie'*`tie'-1)) replace `tie'=`tie'[_N] sort `by' by `by': replace `RankSum'=cond(_n==_N,sum(`RankSum'),.) by `by': replace `Obs'=cond(_n==_N,sum(`Obs'),.) noisily di _n in gr /* */ "Test: Trend across groups" format `RankSum' %9.2f capture { rename `RankSum' _RankSum rename `Obs' _Obs gen _Score = `score' noisily l `by' _Score _Obs _RankSum /* */ if _Obs ~=. & _Obs~=0, noobs drop _Score rename _RankSum `RankSum' rename _Obs `Obs' } if _rc { mac def _rc = _rc capture drop _RankSum capture drop _Obs capture drop _Score error `rc' } gen `TStat'=sum(`RankSum'*`score') gen `GScores'=sum(`score'*`Obs') gen `G2Score'=sum(`score'*`score'*`Obs') replace `Obs'=sum(`Obs') local a=`tie'/(`Obs'*(`Obs'*`Obs'-1)) in l local Z=(`TStat'-0.5*(`Obs'+1)*`GScores')/* */ /sqrt((1-`a')*(`Obs'+1)/12/* */ *(`Obs'*`G2Score'-`GScores'*`GScores')) in l } #delimit ; di _new in gr " z = " in ye %9.3f `Z' _n in gr "probability = " in ye %10.4f 2*( 1-normprob(abs(`Z'))); #delimit cr end