从> 3个分类变量(+维护列名称)构造新变量以用于Stata中的马赛克图
Construct new variable from >3 categorical variables (+maintain column names) for mosaic plot in Stata
我的问题是此处问题的扩展:Construct new variable from given 5 categorical variables in Stata
我是一名 R 用户,我一直在努力适应 Stata 语法。另外,我已经习惯了 Google for R documentation/examples online 并且没有找到那么多的 Stata 资源所以我来到这里。
我有一个数据集,其中行代表个人,列记录这些人的各种属性。有 5 个分类变量(白人、西班牙裔、黑人、亚裔、其他)具有二进制响应数据,0 或 1("No" 或 "Yes")。我想使用 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 命令生成一个 table 来制作以下内容:
respond, black, asian, white, hispanic
responded to survey | 20, 30, 25, 10, 15
did not respond | 15, 20, 21, 23, 33
您似乎想要一个指示变量而不是多个 {0,1} 虚拟变量。最简单的方法可能是循环;另一种选择是使用 cond()
生成一个新的指标变量(请注意,您可能希望在 'other' 组中捕获所有种族假人都是 0
的受访者),标记其值(以及 responded
的值),然后创建您的频率 table:
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
的实际值而不是值标签的字母顺序)。
我的问题是此处问题的扩展:Construct new variable from given 5 categorical variables in Stata
我是一名 R 用户,我一直在努力适应 Stata 语法。另外,我已经习惯了 Google for R documentation/examples online 并且没有找到那么多的 Stata 资源所以我来到这里。
我有一个数据集,其中行代表个人,列记录这些人的各种属性。有 5 个分类变量(白人、西班牙裔、黑人、亚裔、其他)具有二进制响应数据,0 或 1("No" 或 "Yes")。我想使用 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 命令生成一个 table 来制作以下内容:
respond, black, asian, white, hispanic
responded to survey | 20, 30, 25, 10, 15
did not respond | 15, 20, 21, 23, 33
您似乎想要一个指示变量而不是多个 {0,1} 虚拟变量。最简单的方法可能是循环;另一种选择是使用 cond()
生成一个新的指标变量(请注意,您可能希望在 'other' 组中捕获所有种族假人都是 0
的受访者),标记其值(以及 responded
的值),然后创建您的频率 table:
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
的实际值而不是值标签的字母顺序)。