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: Capture break in mata

From   George Vega Yon <>
Subject   st: Capture break in mata
Date   Tue, 1 Oct 2013 15:48:48 -0300

Dear Stata listers,

I've been reading Mata's documentation and I cannot find a way to
simply of working with -capture- block of code. I know that in Stata
one can create -capture- blocks such as

capture {

if (_rc) {

But I haven't seen something like that in Mata. What I'm actually
looking for is to, from within Mata, run a -while- loop and, if the
break key is pressed, do something.

Checking functions -setbreakintr()-, -resetbreakkey()- and
-breakkey()- I know that I can suppress the break key from
interrupting the program, but as I change its behavior the
-breakkey()- function doesn't captures if the break key has been
pressed (which is what I understand from the Diagnostics section in
the help file).

I've tried coding somethign like this

mata clear
real scalar myfun() {

    /* Definitions */
    real scalar i, j, bk;
    real scalar x;

    /* Setting breakkey interrupt off */
    while(!breakkey() & i   < 1e4)
        for(j=1;j<=1000;j  ) x=i;

    /* Restoring breakkey and its mode */
    (void) setbreakintr(bk);




For which, once running, I press the key Break, hoping that the while
loop stops, the x value stores the last -i- used and the breakkey
behavior restores; and what I get this message: "Break disallowed at
this time", and the program continues and returns 1e4 (what means that
it stayed in the loop until i=1e4, i.e. the breakkey() value never
changed from 0).

I know that -setbreakintr(0)- is intended to be used in the same way
that Stata's -nobreak- blocks, but is there any way that I can work
this out using solely Mata?

Thank you and excuse for any nonsense that I'm probably saying.

Best regards,

George Vega Yon
7 647 2552
*   For searches and help try:

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