Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Maarten Buis <maartenlbuis@gmail.com> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: passing indefinite no of arguments |
Date | Fri, 30 Mar 2012 21:52:01 +0200 |
On Fri, Mar 30, 2012 at 8:43 PM, tashi lama wrote: > So, say I have a do file which will add the arguments and display > > *sum > > args a b c d > > di `a' +`b'+`c'+`d' > > This one is easy since I could pass 4 arguments a, b, c and d and my do file will sum them. What if I don't know the no of arguments I am passing? I could have passed 2, 3, 5 or even 1 and find their sum. Here is a quick solution. The logic is that within a program a number of locals are created. The local `0' contains all arguments, and the local `1' contains the first argument, `2' the second, etc. This is not very stable, e.g. when you call -tokenize- the locals `1', `2' etc. will be replaced, but in a small program like the one below it is an easy enough solution. *---------- begin example ------------ program drop _all program define sumargs // count the number of arguments local k : word count `0' // add them tempname sum scalar `sum' = 0 forvalues i = 1/`k' { scalar `sum' = `sum' + ``i'' } // display the result di `sum' end sumargs 2 3 7 sumargs 4 sumargs 2 3 4 5 6 7 8 *---------- end example ------------- -- -------------------------- Maarten L. Buis Institut fuer Soziologie Universitaet Tuebingen Wilhelmstrasse 36 72074 Tuebingen Germany http://www.maartenbuis.nl -------------------------- * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/