st: RE: forvalues and scalar: easy question

How to do this was mentioned in passing in my posting
"counting unique values across a set of variables"
on Tuesday. You don't need a scalar here, or
a prior -generate-, nor a prior -summarize-.
You can do it directly with
forval i = 1/`=_N' {
Please see that posting for more explanation,
and embedding in a real example.
Your approach is correct in principle, except
for trying to refer to the scalar m as if
it were in a local macro m. So a first fix would
be
gen obs = _n
sum obs
local m = r(max)
forval i = 1/`m' {
Because small or occasionally large problems with various
details here could arise in other contexts, I will
spell out various issues.
1. -gen obs = _n- is a useful idiom for many problems.
In really big datasets, you would be better off
specifying a -long-:
gen long obs = _n
2. -sum obs- will take up more effort than is needed
just to get a maximum. Use the -meanonly- option
(which despite its name yields the maximum as well).
3. We could pick up the result of the -summarize-
directly.
So your approach could be condensed to
gen long obs = _n
su obs, meanonly
forval i = 1/`r(max)' {
However, as said, I advise just using _N directly.
This still leaves open the question of whether
you really need a loop over observations. Most of
the time, you don't.
Nick
n.j.cox@durham.ac.uk
Justina.Fischer@unisg.ch
since I have already disturbed a colleague who could not help
me out I am going to confront you with my small problem:
I want Stata to run a loop from 1 to the maximum of observations in my dataset.
I tried:
gen obs2 = _n
sum obs2
scalar m = r(max)
forvalues i=1/`m'{
....
}
Which did not work. There is probably a very easy way to do that
but I just do not know it.
*
* 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/