2016-07-04 4 views
-1

Я создал две матрицы со следующими командами:Как разделить одну матрицу другим в Stata

tab year region if x==1, matcell(cases) 
tab year region, matcell(total) 

Обе матрицы 10 столбцов по 9 строк. Теперь я хочу, чтобы создать новую матрицу с процентами, которые
равняется: р = (случаи/всего) * 100

Но я не могу найти команду, чтобы сделать это в Stata? есть ли простой способ?

+0

Просьба представить воспроизводимые примеры. http://stackoverflow.com/help/mcve объясняет. –

ответ

3

У нас нет собственных данных для экспериментов, поэтому рассмотрим этот аналог.

Мы хотим, чтобы первая таблица составляла процент от второй таблицы. Легко добраться туда напрямую, так как мы можем просто рассчитать сначала то, что хотим показать.

. webuse nlsw88, clear 
(NLSW, 1988 extract) 

. tab race collgrad if married == 1 

      | college graduate 
     race | not colle college g |  Total 
-----------+----------------------+---------- 
    white |  862  288 |  1,150 
    black |  224   50 |  274 
    other |  12   6 |  18 
-----------+----------------------+---------- 
    Total |  1,098  344 |  1,442 


. tab race collgrad 

      | college graduate 
     race | not colle college g |  Total 
-----------+----------------------+---------- 
    white |  1,217  420 |  1,637 
    black |  480  103 |  583 
    other |  17   9 |  26 
-----------+----------------------+---------- 
    Total |  1,714  532 |  2,246 


. egen toshow = mean(100 * (married == 1)), by(race collgrad) 

. tabdisp race collgrad, c(toshow) format(%2.1f) 

---------------------------------------------- 
      |   college graduate   
    race | not college grad  college grad 
----------+----------------------------------- 
    white |    70.8    68.6 
    black |    46.7    48.5 
    other |    70.6    66.7 
---------------------------------------------- 

Но давайте покажем, как работать с матрицами. Обратите внимание, что вы запрашиваете не матричное деление, как обычно понимается в линейной алгебре, поскольку деление является элементарным. Самый простой способ сделать это (сейчас) - вызвать Мату.

quietly tab race collgrad if married == 1, matcell(num) 
quietly tab race collgrad, matcell(den) 
mata : st_matrix("wanted", 100 * st_matrix("num") :/ st_matrix("den")) 
mat li wanted 

wanted[3,2] 
      c1   c2 
r1 70.82991 68.571429 
r2 46.666667 48.543689 
r3 70.588235 66.666667 

Обратите внимание, что это более неудобно делать в Stata в одиночку, но вполне возможно с matewd после установки. Но Stata справедливо отмечает такие программы, как «исторические», так как Stata 9 Mata разрешает однострочное решение. matewd включен в dm69, хотя он не упоминается в краткой информации.

. search dm69, entry historical 


STB-50 dm69 . . . . . . . . . . . . . . . . . . Further new matrix commands 
     (help matdelrc, matewm, matmad, matpow if installed) . . . N. J. Cox 
     7/99 pp.5--9; STB Reprints Vol 9, pp.29--34 
     collection of new matrix commands providing additional matrix 
     checking, management, element-wise operators, maximum absolute 
     difference, and power 
+2

Итак, переведите на свой собственный набор данных. Обратите внимание, что в вашем вопросе говорится 'x'; теперь вы говорите «секс». Принципы одинаковы. –

Смежные вопросы