You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.2 KiB
Plaintext
156 lines
4.2 KiB
Plaintext
9 months ago
|
capture program drop calcscore
|
||
|
program calcscore,rclass
|
||
|
syntax varlist, PARTition(numlist integer >0) [CALCmethod(string) SCOrename(string)]
|
||
|
|
||
|
local y = 1
|
||
|
|
||
|
*di "{bf:Calculs des scores}"
|
||
|
|
||
|
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
|
||
|
}
|
||
|
|
||
|
if "`scorename'" != "" {
|
||
|
local P:word count `partition'
|
||
|
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 119
|
||
|
}
|
||
|
foreach sco in `scorename' {
|
||
|
capture confirm variable `sco'
|
||
|
if !_rc {
|
||
|
di in red "`sco' is a variable of the dataset. Choose another name"
|
||
|
exit 119
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
local cpt = 0
|
||
|
if "`sum'" != "" {
|
||
|
local cpt `cpt' + 1
|
||
|
}
|
||
|
if "`mean'" != "" {
|
||
|
local cpt `cpt' + 1
|
||
|
}
|
||
|
if "`stand'" != "" {
|
||
|
local cpt `cpt' + 1
|
||
|
}
|
||
|
if `cpt'>1 {
|
||
|
di in red "You must choose between mean, sum or stand (the options are exclusive)"
|
||
|
exit 119
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
local i = 1
|
||
|
foreach x in `partition' {
|
||
|
tokenize `varlist'
|
||
|
if `i' == 1 local s = `x'
|
||
|
else local s = `s' +`x'
|
||
|
|
||
|
local liste = ""
|
||
|
forvalues w = `y'/`s' {
|
||
|
local liste `liste' ``w''
|
||
|
}
|
||
|
|
||
|
tempvar nonmiss
|
||
|
qui egen `nonmiss' = rownonmiss(`liste')
|
||
|
|
||
|
if "`scorename'" != "" {
|
||
|
tokenize `scorename'
|
||
|
local sc = "``i''"
|
||
|
}
|
||
|
else local sc = "Dim`i'"
|
||
|
|
||
|
/* if "`calc_method'" == "" {
|
||
|
local calc_method = "mean"
|
||
|
}
|
||
|
|
||
|
if "`calc_method'" != "sum" & "`calc_method'" != "mean" {
|
||
|
di in red "The calc_method option is invalid. Choose mean or sum."
|
||
|
exit 119
|
||
|
}
|
||
|
|
||
|
if "`calc_method'" == "sum" {
|
||
|
qui egen `sc' = rowmean(`liste') if `nonmiss' >= `x'/2
|
||
|
if "`calc_stand'" != "" {
|
||
|
local maxs = 0
|
||
|
foreach var in `liste' {
|
||
|
qui levelsof `var', local(levels)
|
||
|
local max = 0
|
||
|
foreach l in `levels' {
|
||
|
if `l'>`max' local max = `l'
|
||
|
}
|
||
|
local maxs = `maxs' + `max'
|
||
|
}
|
||
|
di "`sc' : `maxs'"
|
||
|
qui replace `sc' = `sc'*`nonmiss'*100/`maxs'
|
||
|
}
|
||
|
else qui replace `sc' = `sc'*`nonmiss'
|
||
|
}
|
||
|
else if "`calc_method'" == "mean" {
|
||
|
qui egen `sc' = rowmean(`liste') if `nonmiss' >= `x'/2
|
||
|
}
|
||
|
*/
|
||
|
if "`calcmethod'" == "" local calcmethod = "mean"
|
||
|
|
||
|
if "`calcmethod'" != "mean" & "`calcmethod'" != "sum" & "`calcmethod'" != "stand" {
|
||
|
di in red "option calcmethod incorrectly specified (choose among mean, sum and stand)"
|
||
|
error 198
|
||
|
}
|
||
|
|
||
|
if "`calcmethod'" == "sum" {
|
||
|
qui egen `sc' = rowmean(`liste') if `nonmiss' >= `x'/2
|
||
|
qui replace `sc' = `sc'*`nonmiss'
|
||
|
}
|
||
|
|
||
|
else if "`calcmethod'" == "stand" {
|
||
|
|
||
|
qui egen `sc' = rowmean(`liste') if `nonmiss' >= `x'/2
|
||
|
qui replace `sc' = `sc'*`nonmiss'
|
||
|
|
||
|
tempvar min max
|
||
|
egen `min' = min(`sc')
|
||
|
egen `max' = max(`sc')
|
||
|
|
||
|
|
||
|
/*
|
||
|
foreach var in `liste' {
|
||
|
/*qui levelsof `var', local(levels)
|
||
|
local max = 0
|
||
|
foreach l in `levels' {
|
||
|
if `l'>`max' local max = `l'
|
||
|
}
|
||
|
local maxs = `maxs' + `max'*/
|
||
|
|
||
|
local max = max(`levels')
|
||
|
}
|
||
|
|
||
|
*/
|
||
|
*di "max : "`max'
|
||
|
*di "min : "`min'
|
||
|
|
||
|
qui replace `sc' = (`sc'-`min')/(`max'-`min')*100
|
||
|
}
|
||
|
|
||
|
else {
|
||
|
qui egen `sc' = rowmean(`liste') if `nonmiss' >= `x'/2
|
||
|
}
|
||
|
|
||
|
local `i++'
|
||
|
local y = `s'+1
|
||
|
}
|
||
|
end
|
||
|
|
||
|
*calcscore ioc1-ioc37, partition(4 4 7 3 3 4 7 5) scorename(HA PSE W BCC AC AE LI MOC) calcmethod(stand)
|
||
|
*calcscore x1-x40, partition(5 5 5 5 5 5 5 5) calcmethod(stand)
|
||
|
*calcscore 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 sf36_7q_intensite_douleurs sf36_8q_douleurs_physiques sf36_1q sf36_11q_malade sf36_11q_porte_bien sf36_11q_degrade sf36_11q_excellente_sante sf36_9q_enthousiaste sf36_9q_energie sf36_9q_epuise sf36_9q_fatigue sf36_6q_vie_sociale sf36_10q_etat_mental sf36_5q_limite_temps_travail sf36_5q_moins_choses sf36_5q_accomplies_soigneusement sf36_9q_nerveux sf36_9q_triste sf36_9q_calme sf36_9q_maussade sf36_9q_heureux, partition(10 4 2 5 4 2 3 5) scorename(PF RP BP GH VT SF RE MH) calcmethod(mean)
|