📄 kwallis.ado
字号:
*! version 2.2.5 16dec2002
program define kwallis, rclass sort
version 6, miss
syntax varname [if] [in], BY(varname)
marksample Touse
markout `Touse' `by', strok
confirm new var _RankSum _Obs
tempvar RankSum Obs Grp Ties
quietly {
*replace `Touse' = . if `Touse'==0
genrank `RankSum' = `varlist' if `Touse'==1
gen long `Obs'=1 if `RankSum'<.
sort `by'
by `by': replace `RankSum'=cond(_n==_N,sum(`RankSum'),.)
by `by': replace `Obs'=cond(_n==_N,sum(`Obs'),.)
by `by': gen long `Grp'=1 if _n==_N & `Obs'>0 & `Obs'<.
sort `Touse' `varlist'
by `Touse' `varlist': gen long `Ties' = _N
replace `Ties'=0 if `Ties'==1
noisily di _n in gr /*
*/ "Test: Equality of populations (Kruskal-Wallis test)"
format `RankSum' %9.2f
char `RankSum'[varname] "Rank Sum"
char `Obs'[varname] "Obs"
sort `by'
noisily l `by' `Obs' `RankSum' if `Obs'<. & `Obs'~=0, /*
*/ noobs subvar div
replace `RankSum'=sum(`RankSum'*`RankSum'/`Obs')
replace `Obs'=sum(`Obs')
local K=12/(`Obs'*(`Obs'+1))*`RankSum'-3*(`Obs'+1) in l
replace `Obs'=`Obs'[_N]
sort `Touse' `varlist'
tempvar T
tempname adj Kties
gen double `T'=0 if `Touse'
by `Touse' `varlist': replace `T'=`Ties'^3 - `Ties' /*
*/ if _n==1 & `Touse'
replace `T' = sum(`T')
scalar `adj'= 1 - (`T'[_N] /(`Obs'^3 - `Obs')) in l
scalar `Kties'=`K'/`adj'
sort `by'
replace `Grp'=sum(`Grp')
drop `T'
}
/* double save in S_# and r() */
ret scalar chi2 = `K'
ret scalar df = `Grp'[_N]-1
ret scalar chi2_adj = `Kties'
global S_1 `K'
global S_2 = `Grp'[_N]-1
#delimit ;
di _new in gr "chi-squared = " in ye %9.3f `K'
in gr " with " in ye `Grp'[_N]-1 in gr " d.f." _n
"probability = " in ye
%10.4f max(chiprob(`Grp'[_N]-1,`K'+(1e-20)),.0001);
di _new in gr "chi-squared with ties = " in ye %9.3f `Kties'
in gr " with " in ye `Grp'[_N]-1 in gr " d.f." _n
"probability = " in ye
%10.4f max(chiprob(`Grp'[_N]-1,`Kties'+(1e-20)),.0001) ;
#delimit cr
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -