[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: can one program a function in Stata?

From   Jacob Wegelin <>
Subject   st: can one program a function in Stata?
Date   Wed, 22 Apr 2009 12:21:33 -0400

I am about to order Kit Baum's Introduction to Stata Programming. But
I'm curious whether his book will answer the following question.

Stata has what I would call plain old functions, of which sqrt() is an example:

. di sqrt(3.1415926535)

. sysuse auto, clear
(1978 Automobile Data)

. gen sqrtTurn=sqrt(turn)

But suppose I want to define a function that's not found under -help
functions-. The following approach (with a hypothetical nonstandard
function) seems clumsy:

capture program drop myownfunction
program define myownfunction, rclass
   if `1' > 3 {
      return scalar myanswer= (sqrt(`1') + 5)^(2/3)
   else {
      return scalar myanswer= (sqrt(`1') + 9)^(2/3)

myownfunction 3.1415926535
di r(myanswer)

Besides the awkward business of having to first call the function,
then refer to - r(myanswer) - , this program only works for a single
number (a scalar in the mathematical not Stata sense). If I want to
apply it to an entire column of numbers (a Stata numeric variable),
I'd have to write a different function, then always remember whether
to call the scalar or the vector (variable) version. On the other
hand, we can use sqrt() directly for either purpose.

Thus, is there a way to define -myownfunction()- so that one can call
it just as one calls sqrt()?  Does one do this with -mata-, or ...?
Would Kit Baum's book talk about this?

Thanks for any insights

Jacob A. Wegelin
Assistant Professor
Department of Biostatistics
Virginia Commonwealth University
730 East Broad Street Room 3006
P. O. Box 980032
Richmond VA 23298-0032
*   For searches and help try:

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