*! NJC 1.1.2 22 Nov 2013
* NJC 1.1.1 3 Nov 2002
* NJC 1.1.0 1 Nov 2002
program def labvalclone
	version 7
	args old new garbage
	if "`old'" == "" | "`new'" == "" | "`garbage'" != "" {
		di as err "syntax is: " /*
		*/ as txt "labvalclone {it:vallblname newvallblname}"
		exit 198
	}
	if "`old'" == "label" | "`old'" == "define" {
		di as err "won't work if {txt:`old'} is existing value label name"
		exit 198
	}
	capture label list `new'
	if _rc == 0 {
		di as err "value labels {txt:`new'} already exist"
		exit 198
	}

	tempfile file1 file2
	tempname in out

	qui label save `old' using `"`file1'"'
	file open `in' using `"`file1'"', r
	file open `out' using `"`file2'"', w
	file read `in' line

	* previously "`old'" "`new'", but this was matched whenever the
	* value label name was a substring of "label" or "define"
	while r(eof) == 0 {
		local line: subinstr local line " `old' " " `new' "
		file write `out' `"`line'"' _n
		file read `in' line
	}
	file close `out'

	qui do `"`file2'"'
end