加入两个矩阵,一个是数字,另一个是百分比

时间:2016-07-04 12:05:22

标签: matrix append stata

我有两个矩阵,案例和百分比。我希望将两者之间的列交替组合,即[c1]%[c1]例[c2]%[c2] ...

tab year region if sex==1, matcell(cases)
tab year region, matcell(total)
mata:st_matrix("percent", 100 * st_matrix("cases"):/st_matrix("total"))


matrix list cases

      c1    c2    c3    c4    c5    c6    c7    c8    c9   c10
r1  1313  1289  1121  1176  1176  1150  1190  1184  1042   940  
r2   340   359   357   366   383   332   406   367   352   272
r3   260   246   266   265   270   259   309   306   266   283
r4   271   267   293   277   317   312   296   285   265   253
r5   218   249   246   213   264   255   247   221   229   220
r6   215   202   157   202   200   204   220   183   176   180
r7   178   193   218   199   194   195   201   187   172   159
r8   127   111   107   130   133    99   142   143   131   114
r9    64    68    85    74    70    60    59    70    76    61


. matrix list percent, format(%2.1f)

percent[9,10]
      c1    c2    c3    c4    c5    c6    c7    c8    c9   c10
r1  70.1  71.2  67.3  67.2  66.9  71.5  72.6  72.5  74.9  73.2
r2  65.3  65.2  69.1  64.4  68.0  70.5  72.0  64.8  66.4  64.9
r3  74.7  73.7  74.7  69.2  68.9  67.6  70.5  72.3  79.4  80.9
r4  66.3  72.6  72.9  74.9  72.7  73.8  72.2  73.3  74.9  71.7
r5  68.8  67.1  66.0  63.6  67.2  67.1  65.2  67.4  68.6  73.8
r6  73.1  72.9  69.2  63.7  67.6  68.0  72.4  68.8  74.9  78.9
r7  64.5  60.3  69.9  70.6  69.3  78.3  72.3  65.8  71.4  71.3
r8  66.1  64.2  63.3  74.7  69.3  56.9  70.6  70.1  63.9  57.9
r9  77.1  73.9  70.2  74.0  71.4  73.2  81.9  72.9  87.4  74.4

如何组合两个矩阵?

目前我已经尝试过:matrix final=cases, percent但它只是把它们放在一起?我想要它,所以每列在案例和百分比之间交替。

然后我将使用putexcel命令将它们放入已经格式化的表中,其中包含大小写和百分比列。

1 个答案:

答案 0 :(得分:1)

首先,我要支持尼克考克斯的评论。

问题是,没有简单的解决方案可以根据需要组合矩阵。然而,通过采用与您概述的路径完全不同的路径,实现您想要的结果很简单。写一篇用自然语言描述技术的文章并不好玩;使用代码来演示它要简单得多,就像我在下面所做的那样,并且我希望尼克可能会倾向于这样做。

如不提供最小,完整且可验证的示例,如Nick提供给您的链接中所述,您不鼓励其他人向您展示您已脱离轨道的位置。

// create a minimal amount of sample data hopefully similar to actual data
clear
input year region sex
2001 1 1 
2001 1 2
2001 1 2
2002 1 1
2002 1 2
2001 2 1
2002 2 1
2002 2 2
end
list, clean noobs
// use collapse to generate summaries equivalent to two tabs
generate male = sex==1
collapse (count) total=male (sum) cases=male, by(year region)
list, clean noobs
generate percent = 100*cases/total
keep year region total percent
// flatten and interleave the columns
reshape wide total percent, i(year) j(region)
drop year
list, clean noobs
// now use export excel to output,
//  or use mkmat to load into a matrix and use putexcel to output