*! created 08/11/93 : ssa6: STB-22 program define slice version 3.0 local varlist "req ex min(1) max(1)" local if "opt" local in "opt" local options "Interval(string) TVid(string) SAVing(string) START(string) GENerate(string) NOLABel" parse "`*'" parse "`varlist'", parse(" ") tempvar beg obs end n Tinit rec tempfile TEMP quietly { if ("`if'`in'"!="") { tempvar touse gen `touse'=0 replace `touse'=1 `if' `in' } else local touse 1 } * keep in memory the original file name local sfn "$S_FN" quietly save `TEMP', replace capture { /* Intercept break key */ if "`tvid'"!="" { confirm var `tvid' sort `tvid' `1' } else { noi di in red "Time varying identifier not specified" err 198 } if "`start'"!="" { confirm var `start' gen int `beg'=`start' } else { by `tvid': gen int `beg'=cond(_n==1 | `1'[_n-1]==.,0,`1'[_n-1]) if `1'!=. } if "`generate'"!="" { confirm new variable `generate' gen byte `generate'=0 if `1'!=. & `touse'==1 } else { noi di in red "generate(new_var) is not optional" err 198 } local time "`1'" gen int `end'=`1' local n 1 local Tinit=_N local rec=_N if "`interval'"=="" { noi di in red "interval() is not optional" err 198 } else { if "`interval'"=="w" { local interval "0 7 15 30 60 90 180 360 540 720" } parse "`interval'", parse(", ") if "`2'"=="" { confirm integer number `1' if `1'<=0 | `1'== . { di in red "interval() invalid" exit 198 } local last=`1' local int "0" quietly summ `end', detail while `last'<_result(6) { local int "`int' `last'" local last=`last'+`1' } parse "`int'", parse(" ") } /* end if */ local last -1 by `tvid': gen int `obs'=_n while "`1'"!="" { if "`1'"!="," { confirm integer number `1' if `1'<=`last' { di in red "intervals must be ascending" exit 198 } by `tvid': replace `obs'=_n expand =2 if `beg'<`end' & `beg'<`1' & `end'>`1' & `end'!=. & `touse'==1, clear sort `tvid' `obs' replace `end'=`1' if `beg'<`end' & `beg'<`1' & `end'>`1'-1 & `end'==`end'[_n+1] & `tvid'==`tvid'[_n+1] & `obs'==`obs'[_n+1] & `end'!=. & `touse'==1 replace `beg'=`1' if `beg'<`end' & `beg'<`1' & `end'>`1' & `beg'==`beg'[_n-1] & `tvid'==`tvid'[_n-1] & `obs'==`obs'[_n-1] & `end'!=. & `touse'==1 replace `generate'=`n' if `beg'>=`1' & `end'!=. & `touse'==1 if `n'==1 { noi di " -" _c } noi di "`1' + " _N-`rec' _n "[`1'-" _c local rec=_N local n =`n'+1 local last `1' local list "`list' `1'" } /* end if */ macro shift } if "`nolabel'"=="" { parse "`list'", parse(", ") label def `generate' 0 " -`1'" 1 "[`1'-`2'" 2 "[`2'-`3'" 3 "[`3'-`4'" 4 "[`4'-`5'" 5 "[`5'-`6'" 6 "[`6'-`7'" 7 "[`7'-`8'" 8 "[`8'-`9'" 9 "[`9'-`10'" 10 "[`10'-`11'" 11 "[`11'-`12'" 12 "[`12'-`13'" 13 "[`13'-`14'" 14 "[`14'-`15'" 15 "[`15'-`16'" 16 "[`16'-`17'" 17 "[`17'-`18'" 18 "[`18'-`19'" 19 "[`19'-`20'" 20 "[`20'-`21'" } } /* end if */ lab var `generate' "Time period `generate'" lab val `generate' `generate' noi di " --------" noi di " " _N-`Tinit' " records added to " `Tinit' if "`start'"!="" { replace `start'=`beg' if `touse'==1 } replace `time'=`end' if `touse'==1 sort `tvid' `time' } /* end capture */ local rc = _rc if `rc'==0 { capture { save `saving' } if `rc'!=0 { quietly use `TEMP', clear mac def S_FN "`sfn'" } } else { quietly use `TEMP', clear mac def S_FN "`sfn'" } erase `TEMP' error `rc' end * slice v638, tvid(no) start(v603) interval(75,78,81,84,87,90) saving(new) gen(periode)