capture program drop kgv
program kgv,rclass
syntax varlist, categ(varlist) [KGVBoxplots KGVGroupboxplots]

local i = 1
local j = 1
local k = 0
local max = 0
local a : word count `categ'
local nb:word count `varlist'

di as result "{hline}"
di "{bf:Known-groups validity}"
di as result "{hline}"
di

foreach sco in `varlist' {
	foreach cat in `categ' {
		local nblev = 0
		local maxlen`j' = 0
		qui anova `sco' `cat'
		local p`i'_`j' =  Ftail(e(df_m), e(df_r), e(F))
		qui levelsof `cat', local(levels)
		local lbe : value label `cat'

		foreach l of local levels {
			qui count if `sco' !=. & `cat' == `l'
			local `++k'
			local eff`i'_`j'_`k' = r(N)

			if "`lbe'" != "" {
				local ll`j'_`k' : label `lbe' `l'
				local len = length("`ll`j'_`k''")
				if `len' > 10 {
					local c = substr("`ll`j'_`k''",1,9)
					local d = substr("`ll`j'_`k''",-1,1)
					local ll`j'_`k' "`c'" "~" "`d'"
				}
				local w = length("`ll`j'_`k''")
				if `w' > `maxlen`j'' local maxlen`j' = `w'
			}
			else {
				local ll`j'_`k' = `l'
				local len = length("`ll`j'_`k''")
				if `len' > 10 {
					local c = substr("`ll`j'_`k''",1,9)
					local d = substr("`ll`j'_`k''",-1,1)
					local ll`j'_`k' "`c'" "~" "`d'"
				}
				local w = length("`ll`j'_`k''")
				if `w' > `maxlen`j'' local maxlen`j' = `w'
			}
			qui su `sco' if `cat' == `l'
			local m`i'_`j'_`k' = r(mean)
			local s`i'_`j'_`k' = r(sd)
			local nblev = `nblev' + 1
		}
		if `nblev' > `max' local max = `nblev'
		local `++j'
		local k = 0
	}
	local `++i'
	local j = 1
}


/* coupure noms des scores */
/*
local i = 1
foreach s in `varlist' {
	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 `varlist' {
	local s`i' = abbrev("`s'",7)
	local sc `sc' `s`i''
	local `++i'
}

/*
local max = 0
foreach s in `scorename' {
	local len = length("`s'")
	if `len' > `max' local max = `len'
}
*/

local maxs = 0
forvalues j=1/`nb' {
	local len`j' = length("`s`j''")
	if `len`j'' > `maxs' local maxs = `len`j''
}

local i = 1
local k = 0
local j = 2

foreach cat in `categ'{
	local `++k'
	tokenize `categ'
	local c`k' = "``i'' ``j''"
	local i = `i' + 2
	local j = `j' + 2
}


local d = 1
local f = 2
forvalues h = 1/`a' {
	if `f' > `a' local f = `f'-1
	local j = 1
	local col =  `maxs'+6
	foreach cat in `c`h'' {
		di _col(`col') "{bf:`cat'}" _c
		local col = `col' + `maxlen`j'' + 5 + 40
		local `++j'
	}
	di

	local j = `d'
	local col = `maxs'+6
	foreach cat in `c`h'' {
		di _col(`=`col'+`maxlen`j''+5') "{bf:      mean    }" _c
		di "{bf:standard    }" _c
		di "{bf:p-value}" _c

		local col = `col' + `maxlen`j'' + 5 + 40
		local `++j'
	}
	di

	local j = `d'
	local col = `maxs'+6

	foreach cat in `c`h'' {
		di _col(`=`col'+`maxlen`j''+6') "{bf:             error}"_c
		local col = `col' + `maxlen`j'' + 5 + 40
		local `++j'
	}


	di
	di
	local i = 1
	local col = `maxs'+6

	forvalues g = 1/`nb' {

		di "{bf:`s`g''}" _c
		forvalues k = 1/`max' {
			forvalues j = `d'/`f' {

				di _col(`col') "{bf:`ll`j'_`k''} " _c
				if "`eff`i'_`j'_`k''" != "" di as text "(n=`eff`i'_`j'_`k'')" _c
				local m : di %6.2f `m`i'_`j'_`k''
				di _col(`=`col'+`maxlen`j''+10') "{text:`m'}  " _c

				local s : di %8.2f `s`i'_`j'_`k''
				di "{text: `s'}  " _c

				if `k' == 1 {
					local p : di %8.3f `p`i'_`j''
					di _col(`=`col'+31') "{text:`p'}  " _c
				}
				local col = `col' + `maxlen`j'' + 5 + 40
			}
			di
			local col = `maxs'+6

		}
		di

	local `++i'

	}
	local d = `d'+2
	local f = `f'+2
	if `d' > `a' continue, break
	di
}

if "`kgvboxplots'" != "" {
	*qui set autotabgraphs on
	if "`kgvgroupboxplots'" != "" {
		foreach c in `categ' {
			foreach s in `varlist' {
				graph box `s', over(`c') name("`s'_`c'",replace) b1title("`c'") nodraw
				local g `g' `s'_`c'
			}
		}
		gr combine `g', name(Known_groups_validity,replace)
	}
	else {
		foreach c in `categ' {
			foreach s in `varlist' {
				graph box `s', over(`c') name("`s'_`c'",replace) b1title("`c'")
				local g `g' `s'_`c'
			}
		}
	}
}
end
*kgv HA-MOC, categ(radio chim) //kgvboxplots kgvgroupboxplots // radio_01 etud_01 actu_01)