Расширить таблицу путем объединения дополнительных переменных в виде столбцов - PullRequest
1 голос
/ 16 октября 2019

У меня есть набор данных, который выглядит следующим образом, но с еще несколькими двоичными переменными результата:

* Example generated by -dataex-. To install: ssc install dataex
clear
input long ID byte(Region Type Tier Secure Offshore Highland)
120034 12 1 2 1 0 1
120035 12 1 2 1 0 1
120036 12 1 2 1 0 1
120037 12 1 2 1 0 1
120038 41 1 2 1 0 0
120039 41 2 2 1 1 0
120040 41 2 1 0 1 0
120041 41 2 1 0 1 0
120042 41 2 1 0 1 0
120043 41 2 1 0 0 .
120044 65 2 1 0 0 .
120045 65 3 1 0 0 0
120046 65 3 1 1 0 0
120047 65 3 2 1 1 0
120048 65 3 2 1 0 0
120049 65 3 2 . 1 1
120050 25 3 2 . 1 1
120051 25 5 2 . 1 1
120052 25 5 1 . 0 1
120053 25 5 2 . 0 .
120054 25 5 2 0 0 .
120055 25 5 1 0 . 0
120056 25 5 1 0 . 0
120057 95 7 1 0 1 0
120058 95 7 1 0 1 0
120059 95 7 1 1 1 0
120060 95 7 2 1 0 1
120061 95 7 2 1 0 1
120062 59 7 2 1 0 1
120063 95 8 2 0 . 1
120064 59 8 1 0 . 1
120065 59 8 1 0 . 0
120066 59 8 1 1 . 0
120067 59 8 1 1 1 0
120068 59 8 2 1 1 0
120069 40 9 2 1 1 1
120070 40 9 2 1 0 1
120071 40 9 2 1 0 1
120072 40 9 1 0 0 1
end

Я создаю таблицу с помощью от сообщества команды tabout:

foreach v of var Secure Offshore Highland{
    tabout Region Type Tier `v' using `v'.docx ///
    , replace ///
    style(docx) font(bold) c(freq row) ///
    f(1) layout(cb) landscape nlab(Obs) paper(A4)
    }

Имеются частоты строк, проценты и итоги.

Однако мне не нужна была вся эта информация, поэтому я изменил свой код следующим образом:

foreach v of var Secure Offshore Highland{
    tabout Region Type Tier `v' using `v'.docx ///
    , replace ///
    style(docx) font(bold) c(freq row) ///
    f(1) layout(cb) h3(nil) h2(nil) dropc(2 3 4 5 7) landscape nlab(Obs) paper(A4)
    }

Это дает то, что мне нужно, но обе версии моего кода создают три отдельные таблицы для каждого результатапеременные. Мне нужно вручную создать одну таблицу, объединяющую три таблицы, в которых левый крайний столбец находится в столбце% от «1», а самый правый столбец показывает общее количество строк.

Может ли кто-нибудь помочь мне здесь относительно:

  1. Объединение всех таблиц за один раз, сохранение меток исследовательских переменных слева и справа - итоговая строка-stmost столбца.

  2. Вместо удаления столбцов, кроме% от "1", я хочу иметь только нужный столбец. Удаление столбцов кажется таким грубым и опасным.

  3. Могу ли я получить такой же вывод в Excel через "putexcel"? Я попытался следовать чудесно написанному блогу Чака Хубера. Но я не могу разобраться в части «слияния».

Я зашел так далеко из-за большого и большого изучения, особенно «Руководства пользователя Яна Уотсона для tabout Версия 3» и НиколасаКокс "Как противостоять спискам с силой духа".

Кросс-пост Статистик .

1 Ответ

0 голосов
/ 17 октября 2019

Вы не можете сделать это легко с tabout - для пользовательских таблиц требуется пользовательское программирование.

Мой совет - создать матрицу с любыми необходимыми значениями, а затем использовать (также) community-Внес команду esttab для табулирования и экспорта всего.

Тем не менее, то, что вы хотите, требует много работы, но вот упрощенный пример, основанный на ваших данных:

matrix N = J(1, 2, .)

local i 0
foreach v in Region Type Tier {
    local i = `i' + 1
    tabulate `v' Secure, matcell(A`i') 
    matrix arowsum = J(1, rowsof(A`i'), 1) * A`i'
    matrix A`i' = A`i' \ arowsum
    if `i' > 1 local N \ N
    matrix m1a = (nullmat(m1a) `N' \ A`i')
}

local i 0
foreach v in Region Type Tier {
    local i = `i' + 1
    tabulate `v' Offshore, matcell(B`i') 
    matrix browsum = J(1, rowsof(B`i'), 1) * B`i'
    matrix B`i' = B`i' \ browsum
    if `i' > 1 local N \ N
    matrix m2a = (nullmat(m2a) `N' \ B`i')
}

local i 0
foreach v in Region Type Tier {
    local i = `i' + 1
    tabulate `v' Highland, matcell(C`i') 
    matrix crowsum = J(1, rowsof(C`i'), 1) * C`i'
    matrix C`i' = C`i' \ crowsum
    if `i' > 1 local N \ N
    matrix m3a = (nullmat(m3a) `N' \ C`i')
}

matrix m1b = m1a * J(colsof(m1a), 1, 1)
matrix m2b = m2a * J(colsof(m2a), 1, 1)
matrix m3b = m3a * J(colsof(m3a), 1, 1)

matrix M1 = m1a, m1b 
matrix M2 = m2a, m2b
matrix M3 = m3a, m3b

matrix K = J(1, 3, .)
matrix M = M1 \ K \ M2 \ K \ M3 

Затем вы можете использовать esttab для экспорта результатов в Excel или Word:

esttab matrix(M)

---------------------------------------------------
                        M                          
                       c1           c2           c1
---------------------------------------------------
r1                      0            4            4
r2                      3            0            3
r3                      1            3            4
r4                      4            2            6
r5                      2            4            6
r6                      2            3            5
r7                      3            3            6
r1                     15           19           34
r1                      .            .            .
r1                      0            5            5
r2                      5            1            6
r3                      1            3            4
r4                      3            0            3
r5                      2            4            6
r6                      3            3            6
r7                      1            3            4
r1                     15           19           34
r1                      .            .            .
r1                     13            4           17
r2                      2           15           17
r1                     15           19           34
r1                      .            .            .
r1                      .            .            .
r1                      4            0            4
r2                      3            2            5
r3                      3            1            4
r4                      2            4            6
r5                      1            2            3
r6                      4            2            6
r7                      2            3            5
r1                     19           14           33
r1                      .            .            .
r1                      5            0            5
r2                      2            4            6
r3                      3            3            6
r4                      3            1            4
r5                      3            3            6
r6                      0            2            2
r7                      3            1            4
r1                     19           14           33
r1                      .            .            .
r1                      6            7           13
r2                     13            7           20
r1                     19           14           33
r1                      .            .            .
r1                      .            .            .
r1                      0            4            4
r2                      2            3            5
r3                      0            4            4
r4                      5            0            5
r5                      4            2            6
r6                      4            1            5
r7                      3            3            6
r1                     18           17           35
r1                      .            .            .
r1                      1            4            5
r2                      4            0            4
r3                      4            2            6
r4                      2            2            4
r5                      3            3            6
r6                      4            2            6
r7                      0            4            4
r1                     18           17           35
r1                      .            .            .
r1                     13            3           16
r2                      5           14           19
r1                     18           17           35
---------------------------------------------------

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

Обратите внимание, что вышеприведенное можно написать более эффективно, но в этом ответе я сохранил все отдельно, чтобы вы могли его понять.


РЕДАКТИРОВАТЬ:

Если вы работаете с матрицами, как указано выше, вы также можете легко использовать putexcel:

putexcel A1 = matrix(M)
...