Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
st: Create a row matrix with weighted frequencies from various dummy variables
From
Nikolaos Kanellopoulos <[email protected]>
To
[email protected]
Subject
st: Create a row matrix with weighted frequencies from various dummy variables
Date
Fri, 1 Jul 2011 11:28:38 +0100 (BST)
Dear all,
I have two sets of dummy variables (say d1,...,d20 and z1,...,z5) and I want to
create a 1x100 matrix where each element will be the weighted frequency for each
combination between each d-variable and each z-variable when both equal 1 (lets
say something like this [d1=1&z1=1(wt),
d1=1&z2=1(wt),...,d200=1&z4=1(wt),d200=1&z5=1(wt)].
My thought is to use the following:
********************************************************************
clear *
set seed 10235
drop _all
set obs 1000
/*Generate data*/
forv i=1/20 {
gen d`i' = round(uniform())
}
forv i=1/5 {
gen z`i' = round(uniform())
}
generate wt = uniform()
/*generate 100 variables=1 if both dummy vars=1*/
forv i=1/20 {
forv j=1/5 {
ta d`i' if d`i'==1 & z`j'==1 , gen(d`i'z`j')
}
}
/*Check no missing variables and replace with zero if missing*/
forv i=1/20 {
forv j=1/5 {
capt su d`i'z`j'1
if _rc!=0 {
gen d`i'z`j'1=0
}
}
}
/*use tabcount to create 1x1 matrix with frequency for each dz combination*/
forv i=1/20 {
forv j=1/5 {
tabcount d`i'z`j'1 [iw=wt], v1(1) matrix(d`i'z`j')
}
}
/*Put in a 1x100 matrix*/
mat D1=d1z1
forv i=2/5 {
mat D1=D1,d1z`i'
}
mat D=D1
forv i=2/20 {
forv j=1/5{
mat D=D,d`i'z`j'
}
}
/*Round the elements of D*/
mata
d=st_matrix("D")
D=round(d)
st_matrix("D2",D)
end
********************************************************************
Is there a more efficient way to do this? Any suggestion is welcome.
Regards
Nikos
*
* 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/