*  touched NJC 22 May 2007
*! version 0.2 23May2007
*  Author: Nikos Askitas
*  This little program is written for fun and as an exercise to learning stata. 
*  It looks at the values of a variable and tells you whether the first digits 
*  conform to Benford's Law.
*  The author wishes to thank N J Cox for a generous stata lesson
*  delivered through -this- a masterfull rewrite of the first writing
*  and point to firstdigit.ado Nick's more comprehensive  benford treatment.

program benford
	version 8   
	syntax varname(numeric) [if] [in]

	quietly {
		marksample touse 
		count if `touse' 
		if r(N) == 0 error 2000 
		local N = r(N) 

		tempvar d 
		gen byte `d' = real(substr(string(`varlist'), 1, 1)) if `touse' 
	}

	di _n as txt "Digit       Count     Percent     Benford" 
	di "{hline 41}"

	forval s = 1/9 {
		qui count if `d' == `s' 
		di as res %5.0f `s' %12.0f r(N) %12.3f 100 * r(N)/`N' ///
			%12.3f 100 * log10(1 + 1/`s')
	}
end