Allan is incorrect in saying that
gen y = x[rankx]
is not allowed in Stata. That is perfectly
legal, and sometimes very useful. In general,
expressions are allowed in subscripts, and evaluated
observation by observation. Otherwise [_n-1]
would not do what it does. In general, it is
naturally important to be clear that the expression
evaluates to an appropriate integer. (Stata uses
floor() to round non-integers.)
However, this doesn't help in the problem
Ben posted, as he has several variables, not one.
Turning to Allan's own problem, one way round
his difficulty over _N is
forval i = 1/`=_N' {
However,
in rankx
is illegal.
gen newvar = (index == 1) * x1 + (index == 2) * x2 ...
offers another approach to Ben's problem. Note
that if -index- is never one of the specified values
then -newvar- is 0.
Nick
[email protected]
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]]On Behalf Of Allan Reese
> Sent: 03 February 2004 12:55
> To: Stata distribution list
> Subject: Re: st: assignment by indexing
>
>
> On Tue, 3 Feb 2004, Ben Pelzer wrote:
> > Since I'm a stata-rooky this question probably is very
> basic. I'm looking
> > for a way to copy the contents of a specific variable out
> of the list "x1 x2
> > x3 x4 x5" to a new variable, newvar, say. However, which
> variable to copy
> > depends on the value of another variable, index, say. So I
> would need
> > something like:
> >
> > generate newvar = x(index).
>
> Unless I have misunderstood the question, Ben has fingered
> something that
> is a curious gap in Stata, but I may be biased here since
> another package
> provides exactly what he describes. To clarify the
> terminology, he wants
> to assign values from one variable into another, with the
> permutation of
> values determined by a third variable. So
>
> * gen y = x[rankx]
>
> where "rankx" holds the rank of the corresponding value in x,
> would assign
> the x values in order into y.
>
> Unfortunately, * is not currently supported by Stata, and
> appears to be
> one situation where an explicit loop is required. I used
> such code in an
> ado file, but offer here a simplified untested retyping. One
> oddity was
> that _N could not be written in the for command
>
> loc nn = _N
> gen y = .
> forvalues i = 1/`nn' {
> replace y = x in rankx
> }
*
* 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/