*! NJC 1.2.0  9 March 2004 fix v.8 labelling problem
*! NJC 1.1.0  23 February 2000 after a WWG idea
program define _gncyear
	version 6
	syntax newvarname =/exp [if] [in] , Month(int) [ Day(int 1)]

	if `month' == 1 & `day' == 1 {
		di in r "calendar years requested"
		exit 198
	}

	* test month and day
	local test = mdy(`month',`day',2000)
	if `test' == . {
		di in r "invalid start date"
		exit 198
	}

	quietly {
		tempvar touse date
		gen byte `touse' = 1 `if' `in'
		replace `touse' = 0 if `touse' == .
		gen `date' = `exp'

		* ignore any user-specified type
		gen int `varlist' = .

		* version 8 handles labelling differently
		if "$EGEN_Varname" != "" {
			local vlabel "$EGEN_Varname"
		}
		else tempname vlabel

		su `date' if `touse', meanonly
		local ymin = year(r(min))
		local ymax = year(r(max))

		local y = `ymin' - 1
		while `y' <= `ymax' {
			local start = mdy(`month',`day',`y')
			if `start' == . { /* 29 February */
				local start = mdy(3,1,`y')
			}
			local end = mdy(`month',`day',`y' + 1)
			if `end' == . { /* 29 February */
				local end = mdy(28, 2, `y' + 1)
			}
			local Yp1 = mod(`y' + 1,100)
			replace `varlist' = `y' /*
			*/ if `date' >= `start' & `date' < `end' & `touse'
			label def `vlabel' `y' "`y'/`Yp1'", modify
			local y = `y' + 1
		}
		label val `varlist' `vlabel'
	}
end