Создать новую переменную из>3 категориальных переменных (+ сохранить имена столбцов) для мозаичного графика в Stata

Мой вопрос является расширением того, что можно найти здесь: создать новую переменную из 5 категориальных переменных в Stata

Я пользователь R, и я изо всех сил пытался приспособиться к синтаксису Stata. Кроме того, я привык, что могу найти в Google документацию / примеры по R на сайте и не нашел столько ресурсов для Stata, поэтому я пришел сюда.

У меня есть набор данных, где строки представляют отдельных людей, а столбцы записывают различные атрибуты этих людей. Существует 5 категориальных переменных (белая, латиноамериканская, черная, азиатская и др.), Которые имеют двоичные данные ответа, 0 или 1 ("Нет" или "Да"). Я хочу создать мозаичный график данных о гонках и ответах с помощью пакета spineplots. Тем не менее, я считаю, что сначала я должен объединить все 5 категориальных переменных в категориальную переменную с 5 уровнями, которые поддерживают метки (чтобы я мог видеть частоту ответов для каждой этнической группы.) Я играл с функцией egen, но убежище не смог заставить его работать. Любая помощь будет оценена.

Изменить: Добавлено описание того, как мои данные выглядят и как я хочу, чтобы они выглядели.

мои данные прямо сейчас:

person_id,black,asian,white,hispanic,responded

1,0,0,1,0,0

2,1,0,0,0,0

3,1,0,0,0,1

4,0,1,0,0,1

5,0,1,0,0,1

6,0,1,0,0,0

7,0,0,1,0,1

8,0,0,0,1,1

я хочу создать таблицу с помощью команды tabulate, чтобы сделать следующее:

respond, black, asian, white, hispanic
responded to survey |    20, 30, 25, 10, 15

did not respond     |    15, 20, 21, 23, 33

1 ответ

Решение

Похоже, вы хотите одну переменную-индикатор, а не несколько {0,1} манекенов. Самый простой способ, вероятно, с петлей; Другой вариант заключается в использовании cond() создать новую переменную индикатора (обратите внимание, что вы можете захотеть отловить респондентов, для которых все манекены расы 0 в "другой" группе), пометьте его значения (и значения responded), а затем создайте свою таблицу частот:

clear
input person_id black asian white hispanic responded
1 0 0 1 0 0
2 1 0 0 0 0
3 1 0 0 0 1
4 0 1 0 0 1
5 0 1 0 0 1
6 0 1 0 0 0
7 0 0 1 0 1
8 0 0 0 1 1
9 0 0 0 0 1
end

gen race = "other"
foreach v of varlist black asian white hispanic {
    replace race = "`v'" if `v' == 1
}

label define race2 1 "asian" 2 "black" 3 "hispanic" 4 "white" 99 "other"
gen race2:race2 = cond(black == 1, 1, ///
                cond(asian == 1, 2, ///
                cond(white == 1, 3, ///
                cond(hispanic == 1, 4, 99))))

label define responded 0 "did not respond" 1 "responded to survey"
label values responded responded
tab responded race

с результатом

                    |                          race
          responded |     asian      black   hispanic      other      white |     Total
--------------------+-------------------------------------------------------+----------
    did not respond |         1          1          0          0          1 |         3 
responded to survey |         2          1          1          1          1 |         6 
--------------------+-------------------------------------------------------+----------
              Total |         3          2          1          1          2 |         9 

tab responded race2 дает одинаковые результаты с другим порядком (по фактическим значениям race2 а не алфавитный порядок меток значений).

Другие вопросы по тегам