Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

RE: st: time elapsed within 'for' loops


From   "Nick Cox" <[email protected]>
To   <[email protected]>
Subject   RE: st: time elapsed within 'for' loops
Date   Sun, 14 Nov 2004 17:51:47 -0000

It is indeed what David wants, but 
-profiler- neither promises to 
give this information nor in 
fact gives it. 

"The record includes only the time spent 
directly in a program and not time spent 
in other programs that are themselves 
invoked by the program -- these latter 
times are recorded with the invoked program." 

You may be carrying over ideas associated
with -for- in other languages in which 
-for- controls a loop. -for- in Stata 
does that too, but it is nothing other 
than an .ado that runs other commands 
or programs. (There also can be a major 
interpretive overhead. I used to use 
-for- a long time ago to cycle over
stuff, until it became clear that -for- 
itself was sometimes taking many times longer
than what I wanted.) 

In this respect, -for- contrasts sharply 
with -foreach- or -forvalues-, which 
are wired into the executable. Having 
said that, I am not clear that using
-foreach- here would get the profiling 
desired. 

Nick 
[email protected] 

> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]]On Behalf Of 
> Mark Schaffer
> Sent: 14 November 2004 16:27
> To: [email protected]
> Subject: RE: st: time elapsed within 'for' loops
> 
> 
> Nick/David,
> 
> Quoting Nick Cox <[email protected]>:
> 
> > I doubt it. -for- itself is a command. The fact 
> > that it runs other commands is not reflected 
> > by what the profiler reports,
> 
> reshape is an ado, and so profiler should report on how much 
> time was spent
> in reshape, no?  I think this is what David wants.  Or 
> perhaps I missed the
> point somewhere.
> 
> Cheers,
> Mark
> 
> > as is explained 
> > in the help Mark quotes here. 
> > 
> > A quite different comment is beware -for- 
> > and the habit of trying to write miniature programs 
> > as a single call to -for-. It is cute when it 
> > works but very inefficient and all too likely to bite you. 
> > 
> > Nick 
> > [email protected] 
> > 
> > Mark Schaffer
> > 
> > > Try -profiler-; it will probably do what you want.  From the 
> > > help file:
> > > 
> > > "profiler is a programmer's command that can help in 
> > > optimizing ado-files
> > > and other Stata programs.  When profiling is turned on, 
> > > profiler on, Stata
> > > begins keeping a record of each time a program is run and how 
> > > much time is
> > > spent in the program."
> >  
> > David K Evans
> >  
> > > > Is there a simple way to see how much time has elapsed while a
> > > > command in the midst of a "for" loop is running?
> > > > 
> > > > Outside of a loop, I just "set rmsg on" and can see how long
> > each
> > > > command takes.
> > > > 
> > > > But if I have, for example,
> > > > 
> > > > for num 1/10: preserve \ keep if age==X \ reshape [blah blah
> > blah]
> > > > \
> > > > save ageX.dta, replace \ restore;
> > > > 
> > > > and I want to know how long the reshaping took, I'm not sure how
> > to
> > > > find out. "set rmsg on" only gives me the time for the entire
> > loop.
> > > > 
> > > > I know about macros to display the time, but I'm not sure how
> > to
> > > > manipulate them to calculate time elapsed.
> > 

*
*   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/



© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index