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]

From |
Michael Betz <betz.40@buckeyemail.osu.edu> |

To |
"statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu> |

Subject |
st: Keeping values in upper triangle of matrix |

Date |
Tue, 6 Dec 2011 22:30:35 +0000 |

Hi all, I have a data set of 3000 US counties and about 25 variables of county characteristics. For every possible county pair, I need to calculate the difference in every variable. The way I have been doing this is for each variable, I create a matrix in Mata and element subtract the transpose. The upper triangle of the matrix contains the values I need. I send the matrix back to Stata. I then save the observations in the upper half of the matrix in each column as its own data set and append each file. The problem is this takes about an hour to do. I'm looking for a more efficient way to accomplish this task. I wondered if there was a way to save all the elements of the upper triangle of the matrix as a column vector. This would save me the computing time of saving and appending 3000 files for each variable. Thanks, Michael My current code is as follows: foreach x of varlist amenityscale-wages{ use "Merged1993", clear mkmat `x' mata: a=st_matrix("`x'") mata: b=J(3000,3000,1) mata: c=b:*a mata: d=c:-a' mata: st_matrix("z", d) svmat z keep z* save "Matrix1", replace local i=1 cd "C:\Users \Append" foreach y of varlist z*{ use "C:\Users \Matrix1.dta" keep in f/`i' //keep only upper half of matrix keep `y' //keep only one variable ren `y' `x' save `y', replace local i=`i'+1 } save "C:\Users\ appendmat.dta", replace erase z3000.dta local dtafiles: dir . files "*.dta" foreach file of local dtafiles { append using "`file'" erase "`file'" } cd "C:\Users \Data" if `j'>0 merge 1:1 _n using "Finalmat93_00", nogen save "Finalmat93_00", replace local j=`j'+1 } * * 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/

**Follow-Ups**:**Re: st: Keeping values in upper triangle of matrix***From:*brendan.halpin@ul.ie (Brendan Halpin)

- Prev by Date:
**Re: st: Keeping values in upper triangle of matrix** - Next by Date:
**st: execution of the heckman command** - Previous by thread:
**st: Parallel elementwise function application in Mata?** - Next by thread:
**Re: st: Keeping values in upper triangle of matrix** - Index(es):