Setup initial file structure
This commit is contained in:
273
Modules/ado/plus/t/torumm.ado
Normal file
273
Modules/ado/plus/t/torumm.ado
Normal file
@ -0,0 +1,273 @@
|
||||
*! torumm.ado version 1.1.2 fw 12/23/00 convert stata files to rumm format
|
||||
*! syntax varlist(numeric) [, FILEname(string) FACTors(varlist numeric max=3) REVerse(varlist) IDvar(varname) ]
|
||||
*! rev 1.1.0 (12/18/01): adds length of label check
|
||||
|
||||
/*
|
||||
itemSeq Sequence of study items
|
||||
testType E = extended/polytomous M = multiple choice
|
||||
itemCode A maximum 5 character code describeing each item
|
||||
itemState A 30 character description (label)
|
||||
respType N = numeric A = alpha
|
||||
respNumb The number of possible responses
|
||||
scKey Scoring key: blank or R for reversed
|
||||
respSeq 0 to 5 for numeric, A to E for alpha (the lowest level of response)
|
||||
|
||||
itemSeq testType itemCode itemState respType respNumb scKey respSeq
|
||||
1 E I0001 Descriptor for Item 1 N 4 1
|
||||
2 E I0002 Descriptor for Item 2 N 4 R 1
|
||||
3 E I0003 Descriptor for Item 3 N 4 1
|
||||
4 E I0004 Descriptor for Item 4 N 4 R 1
|
||||
5 E I0005 Descriptor for Item 5 N 4 R 1
|
||||
6 E I0006 Descriptor for Item 6 N 4 R 1
|
||||
7 E I0007 Descriptor for Item 7 N 4 1
|
||||
8 E I0008 Descriptor for Item 8 N 4 R 1
|
||||
9 E I0009 Descriptor for Item 9 N 4 R 1
|
||||
10 E I0010 Descriptor for Item 10 N 4 1
|
||||
11 E I0011 Descriptor for Item 11 N 4 R 1
|
||||
12 E I0012 Descriptor for Item 12 N 4 1
|
||||
13 E I0013 Descriptor for Item 13 N 4 R 1
|
||||
14 E I0014 Descriptor for Item 14 N 4 1
|
||||
15 E I0015 Descriptor for Item 15 N 4 1
|
||||
16 E I0016 Descriptor for Item 16 N 4 R 1
|
||||
|
||||
*/
|
||||
|
||||
program define torumm
|
||||
version 6.0
|
||||
syntax varlist(numeric) [, FILEname(string) FACTors(varlist numeric max=3) REVerse(varlist) IDvar(varname) ]
|
||||
tokenize `varlist'
|
||||
|
||||
set more off
|
||||
|
||||
preserve
|
||||
|
||||
/* Process spc file items */
|
||||
|
||||
qui dropvars itemSeq testType itemCode itemStat respType respNumb scKey respSeq
|
||||
|
||||
di "Building SPC file ..."
|
||||
qui gen byte itemSeq = .
|
||||
qui gen str1 testType = "E"
|
||||
qui gen str5 itemCode = ""
|
||||
qui gen str30 itemStat = ""
|
||||
qui gen str1 respType = "N"
|
||||
qui gen byte respNumb = .
|
||||
qui gen str1 scKey = ""
|
||||
qui gen byte respSeq = .
|
||||
|
||||
|
||||
if "`ttype'" == ""{
|
||||
local ttype E
|
||||
}
|
||||
if "`rtype'" == ""{
|
||||
local rtype N
|
||||
}
|
||||
|
||||
local wcount: word count `varlist'
|
||||
local varnum 0
|
||||
while `"`1'"' != ""{
|
||||
local varnum `varnum' + 1
|
||||
local label : variable label `1'
|
||||
local vword "`1'"
|
||||
* di "`1'" " " "`label'"
|
||||
* di `vanum'
|
||||
qui replace itemStat = "`label'" if _n == `varnum'
|
||||
qui replace itemStat = "`vword'" if itemStat == "" & _n == `varnum'
|
||||
qui replace itemSeq = _n if _n == `varnum'
|
||||
qui replace itemCode = "I" + string(_n) if _n == `varnum'
|
||||
qui su `1'
|
||||
qui replace respNumb = (r(max) - r(min)) + 1 if _n == `varnum'
|
||||
qui replace respSeq = r(min) if _n == `varnum'
|
||||
qui bothlist `1' \ `reverse'
|
||||
if "`r(list)'" == "`1'" {
|
||||
qui replace scKey = "R" if _n == `varnum'
|
||||
}
|
||||
|
||||
mac shift
|
||||
}
|
||||
qui compress
|
||||
listblck itemSeq - respSeq in 1 / `wcount'
|
||||
qui outsheet itemSeq-respSeq using "`filename'.spc" in 1 / `wcount',noquote replace
|
||||
|
||||
|
||||
|
||||
|
||||
/* Process itm file items */
|
||||
|
||||
qui tostring `varlist', nodecode /* convert study variables to strings */
|
||||
qui dropvars blockID segID comments blockS blockW TestType RespType itemLen itemSubN missSymb
|
||||
|
||||
|
||||
/* We convert the ID variable to a string format */
|
||||
local type : type `idvar'
|
||||
if substr("`type'",1,3) != "str" {qui tostring `idvar', f(%5.0f)}
|
||||
recast str5 `idvar'
|
||||
qui replace `idvar' = ltrim(`idvar')
|
||||
qui moreobs
|
||||
qui gen order = _n
|
||||
qui replace `idvar' ="aaaaa" in l
|
||||
|
||||
qui gen blockID = _n /* Data should be in order required before running this program */
|
||||
qui gen str2 segID = ""
|
||||
qui gen str30 comments = ""
|
||||
qui gen byte blockS = .
|
||||
qui gen blockW = .
|
||||
qui gen byte TestType = 0
|
||||
qui gen byte RespType = 0
|
||||
qui gen byte itemLen = 0
|
||||
qui gen itemSubN = 0
|
||||
qui gen str3 missSymb = "bsp"
|
||||
|
||||
/* enter blockID data *** This is for line 1*/
|
||||
qui replace blockID = 1 in 1
|
||||
qui replace segID = "1" in 1
|
||||
qui replace comments = "ID" in 1
|
||||
qui replace blockS = 1 in 1
|
||||
qui replace blockW = 5 in 1
|
||||
local block = 1
|
||||
|
||||
if "`factors'" != ""{
|
||||
unab cats : `factors'
|
||||
tokenize "`cats'"
|
||||
local facount : word count `cats'
|
||||
*di "Number of factor variables = " "`facount'"
|
||||
local counter = 0
|
||||
local starter = 7 /* we begin variable placement counting at 30 */
|
||||
/* we have skipped a space so lets add the spacer to the output template */
|
||||
sort order
|
||||
qui gen str1 space1 = ""
|
||||
qui replace space1 = "s" in l
|
||||
|
||||
/* we have to do the same for the factors - we will do do below */
|
||||
while `"`1'"' != ""{
|
||||
local counter = `counter' + 1
|
||||
local facword : word `counter' of `cats'
|
||||
qui tab `1'
|
||||
*di "Variable (" `counter' ") " "`1'" " has " `r(r)' " levels"
|
||||
local block = `block' + 1
|
||||
qui replace blockID in `block' = `block'
|
||||
|
||||
/* Now we enter the factor data - the variable name goes first*/
|
||||
qui replace segID = "2" in `block'
|
||||
local label : variable label `1'
|
||||
if length("`label'") >5 {
|
||||
di
|
||||
di in red "label for `1' (`label') is more than 5 characters in length"
|
||||
exit 198
|
||||
}
|
||||
if "`label'" != "" {
|
||||
qui replace comments = "`label'" in `block'
|
||||
}
|
||||
else {qui replace comments = "`1'" in `block'}
|
||||
|
||||
qui replace blockS = `starter' in `block'
|
||||
qui replace blockW = 1 in `block'
|
||||
local starter = `starter' + 1
|
||||
|
||||
/* Now we move to the labelled categories & move down a row */
|
||||
local block = `block' + 1
|
||||
qui replace blockID in `block' = `block'
|
||||
qui tab `1' /* The number of levels is r(r) then `catlev'*/
|
||||
local catlev = `r(r)'
|
||||
qui vallist `1',label s(^)
|
||||
local avals `r(list)'
|
||||
local avals : subinstr local avals " " "_", all
|
||||
local avals : subinstr local avals "^" " ", all
|
||||
qui vallist `1'
|
||||
local nvals `r(list)'
|
||||
local vcount = 1
|
||||
*di "Alpha list = " "`avals'"
|
||||
*di "Numerical list = " "`nvals'"
|
||||
*di
|
||||
|
||||
while `vcount' <= `catlev' {
|
||||
|
||||
local aword : word `vcount' of `avals'
|
||||
local nword : word `vcount' of `nvals'
|
||||
qui replace comments = "`aword'" in `block'
|
||||
qui replace segID = "2`counter'" in `block'
|
||||
qui replace blockS = `counter' in `block'
|
||||
qui replace blockW = `nword' in `block'
|
||||
qui replace missSymb = "0" in `block'
|
||||
*di "`aword'" " " "`nword'"
|
||||
if `vcount' != `catlev' {local block = `block' + 1 }
|
||||
local vcount = `vcount' + 1
|
||||
}
|
||||
qui tostring `1', nod
|
||||
sort order
|
||||
qui replace `1' = "f" in l
|
||||
mac shift
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
di "No factor model"
|
||||
qui gen str1 space1 = ""
|
||||
qui replace space1 = "s" in l
|
||||
local starter = 7
|
||||
}
|
||||
|
||||
/* Now begin the placement of variables */
|
||||
local block = `block' + 1
|
||||
local starter = `starter' + 2
|
||||
sort order
|
||||
qui gen str2 space2 = ""
|
||||
qui replace space2 = "ss" in l
|
||||
qui replace segID = "3" in `block'
|
||||
qui replace comments = "Items" in `block'
|
||||
qui replace blockS = `starter' in `block'
|
||||
qui replace blockW =`varnum' in `block'
|
||||
qui compress comments
|
||||
qui replace TestType = 1 in `block'
|
||||
qui replace RespType = 1 in `block'
|
||||
qui replace itemLen = 1 in `block'
|
||||
qui replace itemSubN = `varnum' in `block'
|
||||
|
||||
/* replace varlist here with v */
|
||||
tokenize `varlist'
|
||||
while `"`1'"' != ""{
|
||||
qui replace `1' = "v" in l
|
||||
mac shift
|
||||
}
|
||||
listblck blockID segID comments blockS blockW TestType RespType itemLen itemSubN missSymb in 1 / `block'
|
||||
qui outsheet blockID segID comments blockS blockW TestType RespType itemLen itemSubN missSymb using "`filename'.itm" in 1 / `block',noquote replace
|
||||
|
||||
/* We can now concatenate into a long string */
|
||||
|
||||
*format `idvar' %030s
|
||||
|
||||
if "`factors'" != ""{
|
||||
local outvar "`idvar' space1 `cats' space2 `varlist'"
|
||||
}
|
||||
else {local outvar "`idvar' space1 space2 `varlist'"}
|
||||
tokenize `outvar'
|
||||
while `"`1'"' != ""{
|
||||
qui replace `1' = "^^^^^^^^^^^^^^^^^^^^" if `1' == "",nop
|
||||
mac shift
|
||||
}
|
||||
local outvar : subinstr local outvar " " "+" , all
|
||||
*di "`outvar'"
|
||||
gen str80 outvar = `outvar'
|
||||
sort order
|
||||
local lcount = 0
|
||||
while `lcount' < _N {
|
||||
local lcount = `lcount' + 1
|
||||
local tempout = outvar in `lcount'
|
||||
local sub : subinstr local tempout "^" " " , all
|
||||
qui replace outvar = "`sub'" in `lcount'
|
||||
}
|
||||
qui compress outvar
|
||||
qui drop in l
|
||||
di "`file'"
|
||||
*format outvar %-080s
|
||||
outfile outvar using `filename'.dat, wide replace noq
|
||||
l outvar
|
||||
restore
|
||||
di
|
||||
su `varlist'
|
||||
|
||||
di
|
||||
di "Files Created: (1) `filename'.scr (2) `filename'.itm (3) `filename'.dat"
|
||||
|
||||
end
|
||||
|
Reference in New Issue
Block a user