*! version 1.00 copyright Richard J. Atkins 2005 program define _gdigit version 7.0 gettoken type 0 : 0 gettoken g 0 : 0 gettoken eqs 0 : 0 * Parse command, validate arguments and set defaults syntax varname(numeric) [if] [in] [, Digit(numlist min=0 max=1 int <=9 >=-9) Round(numlist min=0 max=1 int <=15 >=0)] if ("`digit'" == "") { local digit=0 } if ("`round'" == "") { local round=15 } qui summ `varlist' local leftplaces=int(log10(r(max))) if (`digit'>`leftplaces') { di in r "Digit 10^`digit' is higher than highest digit at 10^`leftplaces'" exit 459 } if (`digit'< -`round') { di in r "Digit 10^`digit' is lower than the current rounding limit of 10^-`round'" exit 459 } marksample touse quietly { gen `type' `g'=. tempvar asstring local strchars = `leftplaces'+`round'+2 local useformat = "%0" + string(`strchars') + "." + string(`round') + "f" gen str`strchars' `asstring' = "" replace `asstring' =string(`varlist', "`useformat'") if(.!=`varlist') if (`digit'>=0) { qui replace `asstring'=substr(`asstring',`leftplaces'+1-`digit',1) } else { qui replace `asstring'=substr(`asstring',`leftplaces'+2-`digit',1) } replace `g' = real(`asstring') label var `g' "10^`digit' digit of `varlist'" } end