Statalist The Stata Listserver

[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: Mata question

From   [email protected] (William Gould, Stata)
To   [email protected]
Subject   Re: st: Mata question
Date   Thu, 20 Apr 2006 09:21:41 -0500

Daniel Hoechle <[email protected]> asked, 

> Is there a Mata equivalent to Stata's -capture- statement?

Yes, but it works differently.

Say you are about to call a function and that function has a certain 
requirement:  Matrix X must be positive definite, variable "mpg" must 
exist, etc.  The function, let's call it xyz(), will abort with error 
if the requirements are not met.

In *SOME* (not all) cases, there will be a corresponding function 
_xyz(), and rather than aborting with error, it will return a certain 
value if the requirements are not met.

Here are some examples:

    stata() and _stata()

        Function stata(string scalar cmd) executes cmd.  If the command 
        fails (nonzero return code), function stata() aborts with error.

        Function _stata(cmd) executes cmd.  Function _stata() returns 
        a real scalar containing the resulting return code.  Function 
        _stata() never aborts.

     fopen() and _fopen()

         Function fopen() opens a file and returns a file handle.  
         fopen("myfile.txt", "r") opens myfile.txt for reading.  If 
         the file does not exist, fopen() aborts with error.

         Function _fopen() opens a file and returns a file handle.
         _fopen("myfile.txt", "r") opens myfile.txt for reading.  If 
         the file does not exist, fopen() returns a negative value.

There are lots of other examples.

As an aside, and underscore in front of a function name does not mean it works
the way just outlined:  All it means is the functions are related, the
_function is a bit more technical.  You have to read the documentation to find
out what more technical means.  Often, however, it means the function returns
something special on failure, rather than aborting with error.

There are also lots of examples where there is no corresponding _function.
That happens when it is easy enough for you top check the function's
requirements.  If you want the equivalent of -capture- when using these
functions, check the requirements.

Here's one example:

    Function st_dropvar() drops variables from the Stata dataset.
    st_dropvar("mpg") would drop variable mpg, if it exists.  If 
    variable mpg does not exist, st_dropvar() aborts with error.

    There is another function, st_varindex(), that returns the 
    variable number associated with a variable name, or it returns 
    missing value if the variable does not exist.  

    Hence, you could code 

           if (st_varindex("mpg")!=.) st_dropvar("mpg")

When looking at the help on a function, scroll down to the section 
Diagnostics.  Listed there are the conditions under which the function 
will abort with error.

-- Bill
[email protected]
*   For searches and help try:

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