Setting aside the possibility of ties, 
egen mthmax = rmax(jan feb mar apr may) 
gen maxmth = "jan" 
foreach v of var feb mar apr may { 
	replace maxmth = "`v'" if `v' == mthmax 
} 
You must keep straight the difference between 
a numeric variable holding the maximum, and 
in your case a string variable holding the 
string indicating when that month is. 
Ties you can check for by 
gen nties = 0 
qui foreach v of var feb mar apr may { 
	replace nties = nties + (`v' == mthmax) 
} 
tab nties 
if -nties- is ever 2 or more, you have ties. 
At some point you will want the numeric 
equivalent of -maxmth-, for graphs, or for 
other calculations. 
You are (almost) using a sequence wired 
into Stata as `c(Mons)'. Try 
di "`c(Mons)'" 
You will get 
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
To map jan feb ... dec to 1 2 ... 12, there 
are slow obvious ways and other more subtle ways. 
Here is one more subtle way: 
gen nmthmax = . 
tokenize `c(Mons)' 
qui forval i = 1/12 { 
	replace nmthmax = `i' if mthmax == lower("``i''") 
} 
Nick 
[email protected] 
Thomas Speidel
 
> I am trying to generate a new variable that contains the name of the 
> variable where a certain expression is true.
> For example consider the following:
> 
> jan        feb        mar        apr        may
> 0          200        195        203        119
> 175        193        220        107        0
> 98         226        0          0          0
> ...
> 
> I want to generate a new variable, say maxmth, that contains 
> the name of 
> the variable where the row maximum occurs.
> In this case maxmth would look like this:
> 
> maxmth
> apr
> mar
> feb
> ...
> 
> I tried something along this:
> .egen maxmth=rmax(jan feb mar apr may)
> .replace maxmth=_varname if maxmth==feb | maxmth==mar | maxmth==apr | 
> maxmth==may
> 
> But I don't know how to refer to the variable name...
*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/