program def copydesc
*! NJC 1.2.1 8 August 2000
* NJC 1.2.0 9 May 2000
* NJC 1.1.0 2 February 2000
* NJC 1.0.0 29 October 1999
	version 6.0
	syntax varlist(min=2 max=2) [, Warn Restrain ]
	tokenize `varlist'
	args src dst

	if "`warn'`restrain'" != "" {
		capture confirm numeric variable `src'
		local snum = _rc == 0
		capture confirm numeric variable `dst'
		local dnum = _rc == 0
		if `snum' != `dnum' {
			local stype = cond(`snum', "numeric", "string")
			local dtype = cond(`dnum', "numeric", "string")
			if "`restrain'" != "" {
				di in r "`src' is `stype', `dst' is `dtype'"
				exit 198
			}
			else di in bl "`src' is `stype', `dst' is `dtype'"
		}
	}

	local w : variable label `src'
	if `"`w'"' == "" { local w "`src'" }
	label variable `dst' `"`w'"'
	local srclab : value label `src'
	capture label val `dst' `srclab'
	local srcfmt : format `src'
	capture format `dst' `srcfmt'

	local chsrc : char `src'[]
	if "`chsrc'" != "" {
		tokenize `chsrc'
		while "`1'" != "" {
			local schar : char `src'[`1']
			char `dst'[`1'] `"`schar'"'
			mac shift
		}
	}
end