Hi, I have the following Mata problem: In an ado program
I use various Mata subroutines and it would be convenient
if earlier Mata functions could leave behind objects to be
picked up by later Mata functions. Here's an artificial
example:
. program define test
1. mata: test1(x=., y=.)
2. mata: test2(x, y)
3. end
. mata:
: void test1(x, y)
> {
> x = "one"
> y = "two"
> }
: void test2(x, y) display(x + y)
: end
. test
onetwo
The problem is that after completion of -test-, "x" and "y"
are still in Mata's memory:
. mata: mata d
# bytes type name and extent
-------------------------------------------------------------
120 void test1()
104 void test2()
11 string scalar x
11 string scalar y
-------------------------------------------------------------
That is, "x" and "y" have to be removed manually at the
end of -test- (mata: mata drop x y). I don't like that and
I am looking for a way to drop "x" and "y" automatically.
I am aware that embedding test1() and test2() in a third
Mata function would solve the problem, but this is not
convenient in my case for other reasons. Furthermore, x and
y could be stored as Stata objects (e.g. Stata scalars) and
picked up from there. But that's not a good solution in my
case either.
My first guess was to use tempnames, but that doesn't work:
. program define test
1. tempname x y
2. mata: test1(`x'=., `y'=.)
3. mata: test2(`x', `y')
4. end
. mata:
: void test1(x, y)
> {
> x = "one"
> y = "two"
> }
: void test2(x, y) display(x + y)
: end
. test
onetwo
. mata: mata d
# bytes type name and extent
--------------------------------------------------------------
120 void test1()
104 void test2()
11 string scalar __000000
11 string scalar __000001
--------------------------------------------------------------
Does anyone have a suggestion how to handle this problem?
Any help will be appreciated,
ben
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/