* Construct lags of an existing variable * Sean Becketti. 9-89 capture program drop lag program define lag version 2.1 qui { if "%_*"=="" { di in bl "-> lag varname [in range][if exp], Nlags(#) [Suffix(s)] exit 198 } mac def _varlist "req ex min(1) max(1)" mac def _if "opt pre" mac def _in "opt pre" mac def _options "Nlags(int 1) Suffix(str)" parse "%_*" if "%_suffix"=="" { mac def _suffix = "%_varlist" } mac def _i = 1 mac def _compare = "<=" mac def _plus ="+" mac def _L = "_L" if %_nlags<0 { mac def _i = "-1" mac def _compare = ">=" mac def _plus = "-" mac def _L = "_F" } if %_nlags==0 { di in re "mlags cannot be zero" exit 198 } while (%_i %_compare %_nlags) { mac def _j=abs(%_i) mac def _k=%_j if %_j > 9 { mac def _s = substr("%_suffix",1,4) } if %_j > 1 & %_j <=9 { mac def _s = substr("%_suffix",1,5) } if %_j==1 { mac def _s = substr("%_suffix",1,6) mac def _k } mac def _name "%_L`%_k`%_s" g %_name = %_varlist[_n-%_i] lab var %_name "%_L(%_j) of %_varlist" mac def _i = %_i %_plus 1 } } end