Statalist


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

st: Re: controlling output in the results window


From   Kit Baum <baum@bc.edu>
To   statalist@hsphsun2.harvard.edu
Subject   st: Re: controlling output in the results window
Date   Sat, 21 Feb 2009 08:20:14 -0500

<>
First of all do not compile your function into a .mo. (I know, my slides show how to do that, but it confuses the issue here). Put all of the Mata code in the do-file that you're running. You need not make an ado-file out of it.

The error at the execution of your Mata function presumably results from "ColFirm" being something other than a numeric scalar. That is what you have told Mata to expect. In hprescott.ado I pass a number, stored in local macro smooth, to the Mata routine. Note how it is `smooth', not "`smooth'".

Your function is looking for a matrix FirmModelResults, but you are declaring it as a string scalar. If you generate a matrix in Stata and want to use it in Mata, the easiest way is via st_matrix(). Likewise FirmModelVar is a matrix, so should be transferred as such. The reason why hprescott uses string scalars is that it has to exchange lists of variable names with Stata. The logic would be quite different if it was exchanging matrices with Stata.

Kit Baum, Boston College Economics and DIW Berlin
http://ideas.repec.org/e/pba1.html
An Introduction to Modern Econometrics Using Stata:
http://www.stata-press.com/books/imeus.html


On Feb 21, 2009, at 02:33 , Tom wrote:

I am back again, having studied your slides.  I have some conceptual
questions.  I was unable to convert my called do file to an ado nor
understand several of the posts people submitted in response to my
inquiries on the conversion.  So, having read your slides I took the
section of my called do file that I was unable to silence with the
quietly command and attempted to make it a mata function, but I have
been unable to get that to work, either.  One thing I have noticed is
that the Stata manuals in M-1 ado - using Mata with ado files and your
slides always seem to imply that a mata function is called from a
stata program passing stata variables.  In my case, I have a stata
program with significant sections of mata code and mata variables
created prior to the called mata function, so I am left wondering how
does one pass mata variables to a mata function?  If this is not
permitted, does this mean I need to broaden my mata function to
include all the mata code in the stata program and pass stata
variables as in the examples?

Here is the code section I am trying to convert to a mata function
right below the end of the quietly command where colFirm,
FirmModelResults, and FirmModelVar are mata variables created earlier:

*end quietly
}

mata:

//Used one pass loop to clean up output
for (mh=1; mh<=1;mh++) {

	printf("Results for Event Period beginning with trading day %4.0f and
ending at day %4.0f\n",
strtoreal(st_local("EventBeginDay")), strtoreal(st_local("EventEndDay"))) printf("Average Firm Adjusted R Square %12.4f \n",FirmModelResults[1,colFirm])
	printf("\n")
	printf("{txt}Average Firm Model{c |}        Coef        SampSE
t-stat       p-val\n")
	printf("{hline 18}{c +}{hline 52}\n")

	for (mi=1; mi<= colFirm-1; mi++) {

		printf("{txt}   %13s  {c |}", FirmModelVar[mi])
	
		for (mj=1; mj <=4; mj++) {

			printf("{res}    %9.4f",FirmModelResults[mj,mi])

		}
	
		printf("\n")

	}

}

end

Here is the do file I use to create the function (as a side question,
every time I run this the replace option fails giving me an error that
the .mo already exists and I have to manually delete it and restart
stata.  I have posted this to tech support to see if this is a bug but
thought I would mention in case you see something I am doing wrong):

*PooledResultsMo.do
version 10.1
mata:
void PooledResultsMo(real scalar colFirm, string scalar
FirmModelResults, string scalar FirmModelVar)
{
	printf("Results for Event Period beginning with trading day %4.0f and
ending at day %4.0f\n",
strtoreal(st_local("EventBeginDay")), strtoreal(st_local("EventEndDay"))) printf("Average Firm Adjusted R Square %12.4f \n",FirmModelResults[1,colFirm])
	printf("\n")
	printf("{txt}Average Firm Model{c |}        Coef        SampSE
t-stat       p-val\n")
	printf("{hline 18}{c +}{hline 52}\n")

	for (mi=1; mi<= colFirm-1; mi++) {

		printf("{txt}   %13s  {c |}", FirmModelVar[mi])
	
		for (mj=1; mj <=4; mj++) {

			printf("{res}    %9.4f",FirmModelResults[mj,mi])

		}
	
		printf("\n")

	}
}

mata mosave PooledResultsMo(), dir(PERSONAL) replace
end

And here is the error I get when I try to execute the entire program
where a do file calls a do file which calls PooledResultsMo:


. *end quietly
. }
. mata:PooledResultsMo("`colFirm'", "`FirmModel'", "`FirmModelVar'" )
      PooledResultsMo():  3253  <tmp>[1,1] found where real required
                <istmt>:     -  function returned error
r(3253);

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/



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