program sequencex, rclass version 11 syntax varlist(min=1 max=30 numeric), diaryid(string) diaryst(string) tokenize `varlist' quietly { //for the report count local startN=r(N) capture drop epnum sort `diaryid' start bysort `diaryid': gen epnum=_n count if epnum==1 local ndiaries=r(N) sort `diaryid' tempvar udid egen `udid'=group(`diaryid') foreach var in `varlist' { replace `var'=999999 if `var'==. replace `var'=888888 if `var'==.a replace `var'=777777 if `var'==.b replace `var'=666666 if `var'==.c replace `var'=555555 if `var'==.d replace `var'=444444 if `var'==.e replace `var'=333333 if `var'==.f replace `var'=222222 if `var'==.g replace `var'=111111 if `var'==.h } sort `udid' start capture drop epnum bysort `udid': gen epnum=_n xtset `udid' epnum foreach var in `varlist' { tempvar diff_`var' gen `diff_`var''=`var'-l1.`var' recode `diff_`var'' (0=0) (.=.) (else=1) replace `diff_`var''=10 if epnum==1 // guarantees that the first ep will never be deleted } tempvar superdiff gen `superdiff'=0 foreach var in `varlist' { replace `superdiff'=`superdiff'+`diff_`var'' } drop if `superdiff'==0 sort `udid' epnum drop epnum bysort `udid': gen epnum=_n xtset `udid' epnum tempvar f1_start gen `f1_start'=f1.start capture drop end gen end=`f1_start' tempvar lastep bysort `diaryid': egen `lastep'=max(epnum) replace end=1440 if epnum==`lastep' capture drop time gen time=end-start capture drop epnum sort `udid' start bysort `udid': gen epnum=_n *clockst xclock`diaryst' label value start xclock`diaryst' label value end xclock`diaryst' capture drop clockst decode start, gen(xxxxx) split xxxxx, p(:) gen yyyyy=xxxxx1+"."+xxxxx2 destring yyyyy, gen(clockst) drop xxxxx xxxxx1 xxxxx2 yyyyy foreach var in `varlist' { replace `var'=. if `var'==999999 replace `var'=.a if `var'==888888 replace `var'=.b if `var'==777777 replace `var'=.c if `var'==666666 replace `var'=.d if `var'==555555 replace `var'=.e if `var'==444444 replace `var'=.f if `var'==333333 replace `var'=.g if `var'==222222 replace `var'=.h if `var'==111111 } order `diaryid' epnum start end time clockst `varlist' lab var epnum "episode number" lab var clockst "start time on 24-hour clock" lab var start "start time of episode (minute of day)" lab var end "end time of episode (minute of day)" lab var time "duration of episode (minutes)" sort `diaryid' count local endN=r(N) local change=`startN'-`endN' local percent=(`change'/`startN')*100 local mean1=`startN'/`ndiaries' local mean2=`endN'/`ndiaries' } *the report if `change'==0 { disp as text "there is no change in the number of episodes" } else { disp as text "the starting file had `startN' episodes (avg. of " %3.1f `mean1' " episodes per diary)" disp as text "the new file has `endN' episodes (avg. of " %3.1f `mean2' " episodes per diary)." disp as text "The new file has `change' fewer episodes that the starting file (" %3.1f `percent' "% reduction)" } end