The main difference between Stata 9 and previous
versions of Stata is the addition of Mata, a matrix programming
language native to Stata 9. Mata can be used for matrix calculations
and can be used as an alternative to add specific functionality to
Stata outside of programming new .ado files.
In this short
introduction, we’ll look at how to verify your Mata settings and a
simple example of how to employ Mata.
What’s Mata?
Mata is not designed to be a replacement for
programming in Stata, i.e. writing new .ado files to add functionality
to Stata. According to the Mata manual, Mata is appropriate for use in
creating subroutines to run within .ado files.
Before you use Mata for
the first time, it’s a good idea to see what your Mata settings are
since they will affect how it behaves. This can be accomplished by
invoking Mata in Stata by typing mata on the Stata command line
and then typing mata query at the Mata prompt:
Stata/Mata will return the settings for the
following components of Mata (from Stata 9 help files): matastrict
sets whether declarations can be omitted inside the body of a program.
The default is off. If matastrict is switched on, compiling
programs that omit the declarations will result in a compile-time
error. The next component, matalnum turns program line-number
tracing on or off. The default setting is off. This
setting modifies how programs are compiled. Programs compiled
when matalnum is turned on include code so that, if an error occurs during execution
of the program, the line number is also reported. Turning
matalnum on prevents Mata from being able to optimize programs, so
they will run more slowly. Except when debugging, the
recommended setting for this is off.
Mataoptimize
turns compile-time code optimization on or off. The default setting is
on. Programs compiled when mataoptimize is switched off
will run more slowly and, in some cases, much more slowly. The
only reason to set mataoptimize off is if a bug in the
optimizer is suspected. Matafavor specifies whether, when
executing code, Mata should favor conserving memory (space) or running
quickly (speed). The default setting is space. Switching
to speed will make Mata, in a few instances, run a little quicker but
consume more memory.
Matacache
specifies the maximum amount of memory, in kilobytes, that may be
consumed before Mata starts looking to drop autoloaded functions that
are not currently being used. The default value is 400, meaning
400 kilobytes. This parameter affects the efficiency with which
Stata runs. Larger values cannot hurt, but once matacache
is large enough, larger values will not improve performance.
Matalibs sets the names and order of the .mlib libraries to be
searched. Matalibs usually is set to "lmatabase;lmataado".
However it is set, it is probably set correctly, because Mata
automatically searches for libraries the first time it is invoked in a
Stata session. If, during a session, you erase or copy new
libraries along the adopath, the best way to reset matalibs is
with the mata index command. The only reason to set matalibs
by hand is to modify the order in which libraries are searched.
Matamofirst states whether .mo files or .mlib libraries are
searched first. The default is off, meaning libraries are
searched first.
Now that we’ve reviewed our settings, let’s progress to a simple
example of employing Mata.
Mata: A First Example With An Enhanced Ado
File
(from Mata Manual M-1)
Let’s
pretend that Stata cannot produce sums and we want to write a new
command for Stata that will report the sum of a single variable.
Here is how this could be done with an .ado file:
Invoking this program
from within Stata will produce the sum of a variable with the syntax
of varsum and then the variable name. On a closing note, I will
be covering elementary Mata operations in my Intermediate Stata short
course in Fall 2005. Until then, happy computing!