*! 1.0.0 NJC 26 Oct 2001
program define _gdecimal
	version 7.0

	gettoken type 0 : 0
	gettoken g    0 : 0
	gettoken eqs  0 : 0

	syntax varlist(numeric min=1) [if] [in] [, Base(numlist max=1 int >1) ]

	marksample touse
	* ignores type passed from -egen-
	local type "long"
	if "`base'" == "" { local base = 2 }

	foreach v of varlist `varlist' {
		capture assert `v' == int(`v') if `touse'
		if _rc == 0 {
			capture assert `v' >= 0 & `v' < `base' if `touse'
		}
		if _rc {
			di as err "invalid syntax: `v' not base `base'"
			exit 198
		}
	}

	local nvars : word count `varlist'
	tokenize `varlist'

	quietly {
		gen `type' `g' = 0 if `touse'
		forval i = 1/`nvars' {
			local power = `nvars' - `i'
			replace `g' = `g' + ``i'' * `base'^`power'
		}
		compress `g'
	}
end