*! version 2.0.0 *! lag -- construct lags of existing variable *! Sean Becketti, April 1991, revised March 1994. program define lag version 3.1 capture confirm integer number `1' if _rc==0 { local flags `1' /* Front LAGS */ if `flags'==0 { exit } mac shift } local varlist "req ex min(1)" local options "Lags(str) Suffix(str)" parse "`*'" local vars: word count `varlist' /* How many variables? */ local sfx = "`suffix'"!="" /* Are there suffixes? */ if `sfx' { _subchar "," " " "`suffix'" local suffix "$S_1" local sfxs: word count `suffix' } else { local sfxs 0 } if `sfx' & (`sfxs'<`vars') { exit 198 } /* How were the lags specified? */ if ("`flags'"!="") & ("`lags'"!="") { exit 198 } if ("`lags'"!="") { /* lags() option used */ _subchar "," " " "`lags'" local lags "$S_1" local nlags: word count `lags' } else { if ("`flags'"!="") { local lags "`flags'" } else { local lags 1 } local nlags 1 } local i 0 while (`i'<`vars') { local i = `i' + 1 local vname: word `i' of `varlist' local type : type `vname' if `sfx' { local v: word `i' of `suffix' } else { local v `vname' } if (`i'<=`nlags') { local orgl: word `i' of `lags' } if (`orgl'<0) { /* lag or lead? */ local l = abs(`orgl') local L "F" local lead 1 } else { local l `orgl' local L "L" local lead 0 } local j 0 while (`j'<`l') { local j = `j' + 1 local k = cond(`lead',-`j',`j') _addop `v' `L' local v "$S_1" capture confirm var `v' if _rc==0 { di in bl "(note: `v' replaced)" drop `v' } qui gen `type' `v' = `vname'[_n-`k'] local end = index("`v'",".") - 1 local prefix = substr("`v'",1,`end') label var `v' "`prefix'`vname'" } end