Создать новую переменную из>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
а не алфавитный порядок меток значений).