program define testclv
syntax [,corr(real 0) nosim]

clear
qui set matsize 800
qui set memory 128m
set more off

if `corr'==0 {
   local rho 0.0
}
else if `corr'==1 {
   local rho 1.0
}
else {
   local rho 0`corr'
}

if "`sim'"=="" {
   capture use "C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\result.dta", clear
   if _rc==0 {
      mkmat *,matrix(result)
      use "C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\resultpoly.dta", clear
      mkmat *,matrix(resultpoly)
      use "C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\result2.dta", clear
      mkmat *,matrix(result2)
      use "C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\resultpoly2.dta", clear
      mkmat *,matrix(resultpoly2)
   
      count if resultpoly21!=0
      local deb=r(N)+1
   }
   else {
      matrix result=J(100,14,0)
      matrix resultpoly=J(100,14,0)
      matrix result2=J(100,14,0)
      matrix resultpoly2=J(100,14,0)
      local deb=1
   }
   forvalues i=`deb'/100 {
      di "`i'" _c
      qui simirt,dim(7 7) cov(1 1 `rho') clear nbobs(500) store(C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\data`i') replace
      di "." _c
      qui clv i*,nodendro nobiplot
      di "." _c
      local group:word 1 of `r(bestthresold)'
      local group2:word 2 of `r(bestthresold)'
      qui clv,nodendro nobiplot cons(`group')
      di "." _c
      matrix tmp=r(affect)
      matrix result[`i',1]=tmp
      di "." _c
      qui clv,nodendro nobiplot cons(`group2')
      di "." _c
      matrix tmp=r(affect)
      matrix result2[`i',1]=tmp
   
      di "." _c
      qui clv i*,nodendro nobiplot method(polychoric)
      di "." _c
      local group:word 1 of `r(bestthresold)'
      local group2:word 2 of `r(bestthresold)'
      qui clv,nodendro nobiplot cons(`group')
      di "."
      matrix tmp=r(affect)
      matrix resultpoly[`i',1]=tmp
      di "." _c
      qui clv,nodendro nobiplot cons(`group2')
      di "."
      matrix tmp=r(affect)
      matrix resultpoly2[`i',1]=tmp
   
      drop _all
      svmat result
      save "C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\result",replace
   
      drop _all
      svmat resultpoly
      save "C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\resultpoly",replace
   
      drop _all
      svmat result2
      save "C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\result2",replace
   
      drop _all
      svmat resultpoly2
      save "C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\resultpoly2",replace
   
   }
}
foreach file in "result" "result2" "resultpoly" "resultpoly2" "result2nd" "result2nd2" {
   drop _all
   di "`file'"
   use "C:\Documents and Settings\Jean-Benoit\Mes documents\THESE\clv\simul (rho=`rho')\\`file'",clear
   quietly {
      forvalues i=1/7 {
         rename `file'`i' itemA`i'
         rename `file'`=`i'+7' itemB`i'
      }
      gen conc=0
      gen dis=0
      forvalues i=1/7 {
         forvalues j=`=`i'+1'/7 {
            replace conc=conc+1 if itemA`i'==itemA`j'
            replace conc=conc+1 if itemB`i'==itemB`j'
         }
      }
      forvalues i=1/7 {
         forvalues j=1/7 {
            replace dis=dis+1 if itemA`i'==itemB`j'
         }
      }
      gen result=.
      replace result=1 if conc==42&dis==0&result==.
      replace result=3 if conc<42&dis==0&result==.
      replace result=4 if dis>0&conc>0&result==.
      replace result=5 if dis==49&result==.
      egen nbcl=rowmax(item*)
   }
   if "`file'"=="result" {
      local text="CLV Classique"
   }
   if "`file'"=="result2" {
      local text="CLV Classique 2e choix"
   }
   if "`file'"=="resultpoly" {
      local text="CLV Polychoric"
   }
   if "`file'"=="resultpoly2" {
      local text="CLV Polychoric 2e choix"
   }
   if "`file'"=="result2nd" {
      local text="CLV 2nd ordre "
   }
   if "`file'"=="result2nd2" {
      local text="CLV 2nd ordre 2e choix"
   }
   di in gr "`text'"
   tab result 
}

end
