# Re: st: Time to run a program

 From Jean-Benoit Hardouin To statalist@hsphsun2.harvard.edu Subject Re: st: Time to run a program Date Wed, 12 May 2004 20:31:35 +0200

OK thank you everybody for these explanations.

My problem is to save the time of computing, because my aim is to compare by simulations several methods, notably to compare them over the time of computing. These method are very long to run (several hours for one of them, several dizains of minutes for two others, seval seconds for the four last), and I so, the displaying of the time of computing is not enough for me: I must save it.

The rmsg and profiler command don't permit a priori to save this time of computing. Since the simulations can run over several days, I must consider the problem of the date, so the problem is complex.

The elapse command seem to be a solution, as the time of computing can be saved in a global macro (\$S_elap) even the obtained result is strange (111 means 1 minute and 11 seconds !!). I test it.

So thank you to Antoine, Ulrich, E. Leuven, Davis and Nick for their help to solve this problem.

Jean-Benoit Hardouin

Le Wed, 12 May 2004 12:40:17 -0400, David Kantor <dkantor@jhu.edu> a écrit:

```At 06:06 PM 5/12/2004 +0200, Jean-Benoit Hardouin wrote:
```
this command permet to display the date/time, but don't solve my problem (Perhaps I have not see all the subtleties of this command).

My problem is to compute the time between the beginning and the end of the running of a program.

[...]

As you mentioned in your earlier message, you can take the time using \$S_TIME (or, equivalently, c(current_time) ).

I'm usually content to just display them and mentally take the difference. But it is possible to automate this. You would need to textually take apart the time value into its components, and convert to numbers. Thus:
local time1 = c(current_time)
scalar hour1 = real(substr("`time1'", 1, 2))
scalar min1 = real(substr("`time1'", 4, 2))
scalar sec1 = real(substr("`time1'", 7, 2))

Do the same for another moment in time.

Then you need to subtract them. The easiest way would be to convert them into seconds (within the day): hour1 * 3600 + min1 * 60 + sec1.

Of course, there are complications if the run spans different days. I leave that to you.

Good luck.
-- David

David Kantor
Institute for Policy Studies
Johns Hopkins University
dkantor@jhu.edu
410-516-5404

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

--
*****************************************************************************
Jean-Benoit Hardouin
37 rue Arrachart
41000 Blois
tél : 02 54 45 39 75
email : jean-benoit.hardouin@neuf.fr
*****************************************************************************
*
*   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/
```