Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
st: RE: Integer program arguments not interpreted as integers (macro expansion question)
From
Joe Canner <[email protected]>
To
"[email protected]" <[email protected]>
Subject
st: RE: Integer program arguments not interpreted as integers (macro expansion question)
Date
Fri, 13 Sep 2013 16:11:30 +0000
Ryan,
When you call your program you should not use parentheses:
. timer_start 99
When you call your program with parentheses, your program interprets the first argument as "(99)" and that doesn't work with -timer on-. (You can do -set trace on- to see this.) In the macro assignment the parenthesis are dropped in the interpretation of the argument as a number. You can remove the "macro insanity" line if you call it without the parentheses.
You call Mata functions with arguments in parentheses, which may be what you were thinking of.
Regards,
Joe Canner
Johns Hopkins University School of Medicine
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Ryan Turner
Sent: Friday, September 13, 2013 11:47 AM
To: [email protected]
Subject: st: Integer program arguments not interpreted as integers (macro expansion question)
Dear Statalist:
I avoid asking beginner questions on the list because I don't want to waste people's time (and I, ahem, don't consider myself a beginner); but can somebody explain this macro insanity below? I know _what_ I did (used an equal sign to force an arithmetic reassignment to the first program argument), but I do not understand _why_ it is necessary (why a macro, not being in double quotes, is not interpreted as an integer when clearly an integer is the only thing that makes sense here).
The purpose of this program is to quietly get timer parameters into the return variables (e.g., for -display r(t1) r(nt1)-). Admittedly it only saves one line of code (I don't need to call -timer list- after -timer on #-) but it is (severally) in the middle of a large program.
Best,
Ryan
capture program drop timer_start
program timer_start
quietly {
local 1 = `1' // macro insanity
timer on `1'
timer list
}
end
capture program drop timer_stop
program timer_stop
quietly {
local 1 = `1' // macro insanity
timer off `1'
timer list
}
end
// Call it with:
timer clear
timer_start(99)
return list
sleep 2000
timer_stop(99)
return list
--
Ryan J. Turner <[email protected]>
Engineering and Public Policy
Carnegie Mellon University
+1-412-304-5014 (C) | +1-484-483-3244 (GV)
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/