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]
Re: st: passing indefinite no of arguments
From
Maarten Buis <[email protected]>
To
[email protected]
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/