Both Nick and Scott's suggestions were quite useful. Scott's is better for this
case, where I would prefer to keep the data in memory. While working it into my
program, I also realized, belatedly, that I need not hard-code the v(.) values
for the -tabcount- command (something that wasn't so obvious late last night!).
In other words:
(snip)
replace var2=var4 if var2==3
su var1
local max1=r(max)
su var2
local max2=r(max) /// Could also be done with -tabstat-
local max=max(`max1',`max2')
tabcount var1, v(1/`max') zero mat(m1)
tabcount var2, v(1/`max') zero mat(m2)
(etc.)
Thanks again to Scott and Nick for their suggestions.
--John-Paul Ferguson
Quoting Scott Merryman <[email protected]>:
> Another way is to use Nick Cox's -tabcount- which will tabulate missing
> values.
>
> **********
> clear
> set obs 100
> set seed 1234567
> forv i=1/2 {
> g var`i'=1
> replace var`i'=2 if uniform()>.4
> replace var`i'=3 if uniform()>.3
> }
> replace var2=4 if var2==3
>
> tabcount var1, v(1/4) zero mat(m1)
> tabcount var2, v(1/4) zero mat(m2)
> levels var1, local(l1)
> levels var2, local(l2)
> local l3 : list l1 | l2
> local rows : subinstr local l3 " " ",", all
> matrix rows = (`rows')'
> matrix freq = rows, m1, m2
> matrix list freq
>
> Hope this helps,
> Scott
>
>
> > -----Original Message-----
> > From: [email protected] [mailto:owner-
> > [email protected]] On Behalf Of Nick Winter
> > Sent: Wednesday, June 08, 2005 7:03 PM
> > To: [email protected]
> > Subject: Re: st: Merging matrices
> >
> > I'm sure there is something better, but what occurs to me is to use -
> > svmat-
> > and -merge-. Something like this, after the code you've generated:
> >
> > drop _all
> > svmat v1
> > rename v11 value
> > sort value
> > save temp1
> > drop _all
> > svmat v2
> > rename v21 value
> > sort value
> > merge value using temp1
> >
> > foreach v in v12 v22 {
> > replace `v' = 0 if mi(`v')
> > }
> > sort value
> >
> >
> > This would need to be generalized a bit, and would need to rename/label
> > the
> > resulting variables better, etc., but might be a viable approach.
> >
> > --Nick Winter
> >
> > At 07:18 PM 6/8/2005, you wrote:
> > >Hello all,
> > >
> > >I am trying to write a program that (in part) displays a special table
> > showing
> > >the frequency counts of two variables. I am currently using -tabulate- on
> > the
> > >two variables and extracting the necessary row and frequency names. It's
> > then
> > >easy to show TWO tables with the frequencies, via simple matrix
> > subscripting.
> > >The difficulty that showing them in one table imposes is that, unless the
> > list
> > >of row names is the same in the two variables, displaying the stored
> > >frequencies via simple matrix subscripting will line up the rows
> > incorrectly.
> > >
> > >To make this clearer, consider the following code:
> > >
> > >**********
> > >clear
> > >set obs 100
> > >set seed 1234567
> > >forv i=1/2 {
> > > g var`i'=1
> > > replace var`i'=2 if uniform()>.4
> > > replace var`i'=3 if uniform()>.3
> > >}
> > >replace var2=4 if var2==3
> > >tab var1, matcell(freqs1) matrow(nums1)
> > >mat v1=(nums1,freqs1)
> > >tab var2, matcell(freqs2) matrow(nums2)
> > >mat v2=(nums2,freqs2)
> > >**********
> > >
> > >The two resulting matrices will look as follows:
> > >
> > >. mat list v1
> > >
> > >v1[3,2]
> > > c1 c1
> > >r1 1 15
> > >r2 2 28
> > >r3 3 57
> > >
> > >. mat list v2
> > >
> > >v2[3,2]
> > > c1 c1
> > >r1 1 21
> > >r2 2 25
> > >r3 4 54
> > >
> > >What I would like to create is a hypothetical v3, which looks like this:
> > >
> > >v3[4,3]
> > > c1 c1 c1
> > >r1 1 15 21
> > >r2 2 28 25
> > >r3 3 57 0
> > >r4 4 0 54
> > >
> > >I've been poring over the -matrix- commands, and I just can't figure out
> > a way
> > >to create this matrix. I've also looked at -tabcount- and -groups-,
> > without
> > >success (I know that Nick Cox wrote on these recently, but our library's
> > copy
> > >of the SJ is at the bindery, worse luck!).
> > >
> > >Does anyone have any ideas for producing v3, as described above?
> > >
> > >Thanks,
> > >John-Paul Ferguson
> > >*
> > >* 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/
> >
> > --------------------------------------------------------
> > Nicholas Winter 607.255.8819 t
> > Assistant Professor 607.255.4530 f
> > Department of Government [email protected] e
> > 308 White Hall falcon.arts.cornell.edu/nw53 w
> > Cornell University
> > Ithaca, NY 14853-4601
> >
> > *
> > * 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/
>
>
> *
> * 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/
>
*
* 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/