program define matmap 
*! 1.0.0  NJC 23 August 2000
	version 6.0
	gettoken A 0 : 0
	gettoken B 0 : 0, parse(" ,") 
	syntax , Map(str) [ Symbol(str) ]

	if "`symbol'" == "" { local symbol "@" } 

	if !index("`map'","`symbol'") { 
		di in r "map( ) does not contain `symbol'" 
		exit 198 
	} 	
	
	local nr = rowsof(matrix(`A'))
	local nc = colsof(matrix(`A'))
	
	tempname C val 
	mat `C' = `A'  

	local i 1
	while `i' <= `nr' {
        	local j 1
		while `j' <= `nc' {
			local exp : /* 
			*/ subinstr local map "`symbol'" "`A'[`i',`j']", all 
			scalar `val' = `exp' 
			if `val' == . {
				di in r "matrix would have missing values"
				exit 504
		        }
			mat `C'[`i',`j'] = `val' 
		        local j = `j' + 1
	        }
	        local i = `i' + 1
	}

	mat `B' = `C' /* allows overwriting of either `A' or `B' */
end