Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


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

st: RE: Stata Program Command


From   Nick Cox <n.j.cox@durham.ac.uk>
To   "'statalist@hsphsun2.harvard.edu'" <statalist@hsphsun2.harvard.edu>
Subject   st: RE: Stata Program Command
Date   Fri, 15 Jun 2012 15:53:31 +0100

That's what you ask for. You create a matrix with one row; then if all goes well, you add the same row as a second row. 

Cutting that out, I advise

1. Using temporary names to avoid conflicts. 

2. Using -syntax- to indicate an option. 

3. Using -sqrt()- not powering for square roots. 

4. More checking and labelling. 

Something like 

program define grabest
	version 8 
	syntax [, MATrix(string) ] 

	if "`e(cmd)'" != "regress" { 
		di as err "no regress results in memory" 
		exit 498 
	} 

	if "`matrix'" == "" local matrix "X" 
	tempname betas beta var se  
	matrix `betas' = e(b)
    scalar `beta' = `betas'[1,1]	
	matrix `var' = e(V)
	scalar `se' = sqrt(`var'[1,1])
	matrix `matrix' = `beta', `e(N)', `se' 
	matrix colnames `matrix' = beta N se 
end

But comparable to -eststo- this is not! 

Nick 
n.j.cox@durham.ac.uk 

Hassan Enayati

I am trying to write my first Stata program and am having some
difficulties. At the end of the day, I would like a program (like
eststo but not really the same b/c of formatting issues) that grabs
certain results from a series of regressions (always a simple
regressions) and stores these results in a matrix. Below is the
program. The interesting problem is that the matrix contains duplicate
rows of the last regression and always only two rows.

clear all
sysuse auto
capture matrix drop X
capture program drop grabest
program define grabest
    matrix betas = e(b)
    matrix beta = betas[1,1]
    matrix num = e(N)
    matrix var1 = e(V)
    scalar se1 = ( var1[1,1])^(0.5)
    matrix X = beta, num, se1
    capture confirm matrix X
    if _rc==111 {
        matrix X = beta,num,se1
        }
    else {
        matrix X = X \ beta,num,se1
        }
    matrix drop betas beta num var1
    scalar drop se1
end

reg price weight
grabest
reg length turn
grabest
reg turn weight
grabest
matrix list X

An additional question I have deals more directly with the
construction of the program. How do I create the program so that it
generates a matrix with a name I specify. Hence, I would like to be
able to write:
grabest, matrix(autos1)
where autos1 = X in the above example.


*
*   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   |   Site index