capture program drop repet
program repet,rclass
syntax varlist [in], t2(varlist) PARTition(numlist integer >0) calcmethod(string) [SCOrename(string) KAPpa ICKAPpa(integer 0)]
preserve

local nbvars : word count `varlist'

if "`in'"!="" {
   qui keep `in'
}

if `ickappa' <= 0 {
	local ickappa = ""
}

/*
if "`ickappa'" != "" & "`kappa'" == "" {
	di "{it:The ickappa option is ignored}"
}
*/

local C = 0
foreach z in `partition' {
	local C = `C' + `z'
}
	
local nbvars : word count `varlist'
if `C' != `nbvars' {
	di in red "The sum of the numbers in the partition option is different from the number of variables precised in varlist"
	exit
}

/*
qui tab `id', nofreq
local u = r(r)
if `u' != _N {
	di in red "The variable `ident' has not unique values"
	exit
}
*/

local P:word count `partition'
if "`scorename'" !="" {
	local S:word count `scorename'
	if `P'!=`S' {
		di in red "The number of score names given is different from the number of dimensions in the partition option" 
		exit
	}
}
else {
	local name
	local nname
	forvalues i = 1/`P' {
		local name "Dim`i'"
		local nname `nname' `name'
	}
local scorename = "`nname'"
}

local a:word count `varlist'
local b:word count `t2'
if `a' != `b' di in red "The number of items is not the same in t1 and t2"

/* coupure noms des scores */
/*
local i = 1
foreach s in `scorename' {
	local len = length("`s'")
	if `len' > 10 {
		local c = substr("`s'",1,9)
		local d = substr("`s'",-1,1)
		local s`i' "`c'" "~" "`d'" 
	}
	else local s`i' = "`s'"
	local sc `sc' `s`i''
	local `++i'
}
*/

local i = 1
foreach s in `scorename' {
	local s`i' = abbrev("`s'",10)
	local sc `sc' `s`i''
	local `++i'
}

/* coupure noms des items */
/*
local i = 1
foreach s in `varlist' {
	local len = length("`s'")
	if `len' > 10 {
		local c = substr("`s'",1,9)
		local var`i' "`c'" 
	}
	else local var`i' = "`s'"
	local `++i'
}
*/

local i = 1
foreach v in `varlist' {
	local var`i' = abbrev("`v'",10)
	local `++i'
}

local maxit = 1
forvalues i=1/`nbvars' {
	local len = length("`var`i''")
	if `len' > `maxit' local maxit = `len'
}

local decit = `maxit' + 4
local colit = `decit'



di as result "{hline}"
di as result "{bf:Reproducibility}"
di as result "{hline}"
di

foreach sco in `scorename' {
		*local t = "`sco'bis"
		tempname s
		local scorename2 `scorename2' `s'
}
	
qui calcscore `t2', scorename(`scorename2') partition(`partition') calcmethod(`calcmethod')

local i = 1
foreach var in `varlist' {
	tokenize `t2'
	qui kap `var' ``i''
	local k`i' = r(kappa)
	if "`ickappa'" != "" {
		qui kapci `var' ``i'', reps(`ickappa')
		local lbk`i' = r(lb_bc)
		local ubk`i' = r(ub_bc)
	}
	local `++i'
}

local i = 1
foreach s in `scorename' {
	tokenize `scorename2'
	tempname score id temps
	qui gen `id' = _n
	qui gen `score'_1 = `s'
	qui gen `score'_2 = ``i'' if ``i''!=.
	qui reshape long `score'_, i(`id') j(`temps')
	qui icc `score'_ `id'
	local n`i' = r(N_target)
	local icc`i' = r(icc_i)
	local lb`i' = r(icc_i_lb)
	local ub`i' = r(icc_i_ub)
	*qui drop `score' `temps' `id'
	qui sort `id'
	qui duplicates drop `id', force
	local `++i'
}

tokenize `sc'
local max = length("dimension")

forvalues j=1/`P' {
	local len`j' = length("`s`j''")
	if `len`j'' > `max' local max = `len`j''
}

local dec = `max' + 5

local i = 1
local j = 1
local y = 1
di "{bf:Dimension}" _c
di _col(`=`dec'+2') "{bf:n}" _c
local col = `dec'+6
di _col(`col') "{bf:Item}" _c
local col = `col'+`decit'

if "`kappa'" != "" {
	di _col(`col') "{bf:Kappa}" _c
	local col = `col'+10
	if "`ickappa'" != "" {
		di _col(`col') "{bf:95% CI for Kappa}" _c
		local col = `col'+20	
	}
	
}

di _col(`=`col'+2') "{bf:ICC}" _c
local col = `col'+9
di _col(`col') "{bf:95% CI for ICC}"

local zz = 0
foreach var in `varlist' {
	qui levelsof `var', local(levels)
	local z : word count `levels'
	if `z' > 2 local zz = 1
}

if "`kappa'" != "" & "`ickappa'" != "" & `zz' == 1 {
	local col = `dec'+`decit'+16
	di _col(`col') "{bf:(bootstrapped)}"
}


if "`ickappa'" != "" local h = `dec'+6+`decit'+10+8+21+12+1
else if "`kappa'" != "" local h = `dec'+6+`decit'+10+8+21+12-20
else local h = `dec'+6+`decit'+10+8+21+12-30
di "{hline `h'}"

local i = 1
foreach p in `partition' {
	tokenize `sc'
	di "{bf:``i''}" _c
	di _col(`dec') "{text:`n`i''}" _c
	if `j' == 1 local s = `p'
	else local s = `s' +`p'
	local col = `dec'+6
	di _col(`col') "{text:`var`y''}" _c 
	
	if "`kappa'" != "" {
		local k : di %5.2f `k`y''
		local col = `col'+`decit'
		di _col(`col') "{text:`k'}" _c
		if "`ickappa'" != "" {
			local lbk : di %5.2f `lbk`i''
			local ubk : di %5.2f `ubk`i''
			local col = `col'+11
			di _col(`col') "{text:[`lbk' ; `ubk']}" _c
			local col = `decit'+50
		}
		
	else local col = `decit'+30	
	}
	else local col = `decit'+20
		
	*local col = `decit'+30
	local icc : di %5.2f `icc`i''
	di _col(`col') "{text:`icc'}" _c
	local lb : di %5.2f `lb`i''
	local ub : di %5.2f `ub`i''
	local col = `col'+8
	di _col(`col')"{text:[`lb' ; `ub']}"
	local w = `y'+1
	
	forvalues z = `w'/`s' {
		local col = `dec'+6
		di _col(`col') "{text:`var`z''}" _c
		if "`kappa'" != "" {
			local k : di %5.2f `k`z''
			local col = `col'+`decit'
			di _col(`col') "{text:`k'}" _c
			if "`ickappa'" != "" {
				local lbk : di %5.2f `lbk`z''
				local ubk : di %5.2f `ubk`z''
				local col = `col'+11
				di _col(`col')"{text:[`lbk' ; `ubk']}"
			}
			else di
			
		}
		else di
	}
	local `i++' 
	local `j++' 
	local y = `s'+1
	di
}
end

*repet ioc1-ioc37, t2(ptgi1-peur16) partition(4 4 7 3 3 4 7 5) scorename(HA PSE W BCC AC AE LI MOC) kappa ickappa(20)
*repet sf36_3q_intenses sf36_3q_moderees sf36_3q_soulever sf36_3q_etages sf36_3q_etage sf36_3q_pencher sf36_3q_15km sf36_3q_500m sf36_3q_100m sf36_3q_douche sf36_4q_limite_temps_travail sf36_4q_moins_choses sf36_4q_type_travail sf36_4q_effort , t2(sf36_3q_intenses_v5 sf36_3q_moderees_v5 sf36_3q_soulever_v5 sf36_3q_etages_v5 sf36_3q_etage_v5 sf36_3q_pencher_v5 sf36_3q_15km_v5 sf36_3q_500m_v5 sf36_3q_100m_v5 sf36_3q_douche_v5 sf36_4q_limite_temps_travail_v5 sf36_4q_moins_choses_v5 sf36_4q_type_travail_v5 sf36_4q_effort_v5 ) partition(10 4)