*! raschcvt version 1.2.1 fw 8/1/00 Prepares data file and c0ntrol file for Winsteps *! 5/26/01 update to version 7. turns off log output, 1.2.2 (12/20/01) corrects *! decimal point formatting error and removes "LOADING = 40". program define raschcvt version 7.0 syntax varlist, outfile(string) id(varlist) max(integer) [min(integer 0)] [Xwide(integer 2)] tokenize `varlist' set more off preserve confirm variable `id' di in gr "Building Rasch files" local itemno = 0 local counter = 0 while "`1'" != "`id'" { local itemno = `itemno' + 1 mac shift } capture log close qui log using `outfile'.con, replace di ";The id variable is " "`id'" di ";There are `itemno' items" di ";Items and lengths" tokenize `varlist' while "`1'" != "" { capture assert `1' == int(`1') if _rc != 0 { di "non-integer value found" exit _rc } local counter = `counter' + 1 qui su `1' local f = length("`r(max)'") di ";" "`1'" " " `f' " " `g' if `counter' <= `itemno' { local f = `xwide' } format `1' %0`f'.0f qui replace `1' = 99 if `1' == . & `f' == 2 qui replace `1' = 999 if `1' == . & `f' == 3 macro shift } order `varlist' qui outfile `varlist' using `outfile'.dat, nolabel wide replace di ";`outfile' has been written to disc" di in gr ";Start control file below" di di "TITLE=" di "DATA=`outfile'.dat" di "ITEM1=1" di "NI=" "`itemno'" di "NAME1=" `itemno' +1 di "DELIMITER = SPACE" di "XWIDE=`xwide'" di "CODES="_c if `xwide' == 1{ for num `min' / `max', noheader: di X _c } if `xwide' == 2{ for num `min' / `max', noheader: if X == 0{di "00"_c} \ if X >0 & X <10{di "0"X _c} \ if X >9 & X < 99 {di X _c} } if `xwide' == 3{ for num `min' / `max', noheader: if X == 0{di "000"_c} \ if X >0 & X <10{di "00"X _c} \ if X >9 & X < 99 {di "0"X _c} \ if X >99 {di X _c} } di di "MAXPAG=60" di "PRCOMP=S" di "MUCON=0" di "LCONV= .001 di "RCONV= .1" di "GROUPS=" di "HLINES=Y" di ";PSELECT= ?????1*" di ";TABLES=11110110011111000001111" di ";ISFILE=`outfile'.isf" di ";IFILE=`outfile'.IFL" di ";PFILE=`outfile'.PFL" di ";XFILE=`outfile'.XFL" di di "&END" di tokenize `varlist' while "`1'" != "`id'" { local lbl:variable label `1' di "`lbl'" macro shift } di "END LABELS" di tokenize `varlist' while "`1'" != "`id'" { di "`1'" macro shift } di "END NAMES" qui log close restore end