Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at

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

st: Re: mata for-if-else

From   "Joseph Coveney" <>
To   <>
Subject   st: Re: mata for-if-else
Date   Wed, 14 Apr 2010 22:06:08 +0900

Abhimanyu Arora wrote:

I have simplified my problem to a large extent, but essentially has to do
with using for-if-else commands in mata. I would like to create a matrix 'a'
whose values depend on an existing matrix 'b' (both are 1000X1 vectors to be
precise). I need to tell mata the dimension of a first. But all I get after
executing the commands below is the original vector 'a'. What could be the
possible error? I have tried adding and removing braces but it is not

for(i=1,i<1001,i++) {
if (b[i]==1){
else {a[i]=3


Not to take away from any of the helpful replies that you've already received,
but don't forget that Mata has colon operators that help avoid loops when
dealing with vectors and matrices.  For example, your simplified example can be
handled succinctly without the need for any explicit looping.

: B = (. \ 1 \ 2 \ 3)

: A = J(rows(B), 1, 3) - (B :== 1)

: A
  1 |  3  |
  2 |  2  |
  3 |  3  |
  4 |  3  |

It could be more efficient, too, than an elaborated for-loop with an imbedded
if-then-else section.  You'll need to consider the trade-offs in code
readability (maintainability) if you get too carried away with one-liners like

I'm sure that your real problem is more complicated than the simplified version
you posted for illustration.  And it might not appear, at least at first glance,
to readily lend itself to a colon operator.  But keep in mind that you've got
options (operators, matrix functions) available in Mata to help in just these
kinds of situations. It's a domain-specific programming language that's designed
to be rich in operations that matter in statistical computation.

Joseph Coveney

*   For searches and help try:

© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index