我有以下 Stata 代码可以生成下图。但是,我试图调整/排序 Y 轴上的值,Y 轴是指不同收入组的工人,以遵循与数据集相同的顺序。而不是将每月收入 <= 1500 美元的人安排为第 5 个而不是第一个收入组的当前订单。
number_of_workers income_bracket
24806 <= 1.5
31346 1.5-2.9
648409 3
389266 3.01-4.9
351963 5-9.9
271360 >= 10
收入括号变量是字符串,我尝试将其转换如下:
gen income_bracket_numeric = real(income_bracket)
然而,Stata 将转换后的值视为缺失 (.),除了 3 是数字。有没有办法在不改变原始数据的情况下通过将其设为数字来处理收入范围范围?
preserve
keep if nationality=="nationals"
keep if period=="Q1_2020" | period=="Q4_2020"
graph hbar (mean) number_of_workers, over(income_bracket) over(quarter)
restore
我采纳了尼克的建议,我的代码如下所示:
input number_of_workers_q1 str8 income_bracket_q1
24806 "<= 1.5"
31346 "1.5-2.9"
648409 "3"
389266 "3.01-4.9"
351963 "5-9.9"
271360 ">= 10"
end
input number_of_workers_q4 str8 income_bracket_q4
25073 "<= 1.5"
29628 "1.5-2.9"
596767 "3"
442429 "3.01-4.9"
381794 "5-9.9"
273880 ">= 10"
end
gen order = _n
labmask order, values(income_bracket_q1)
graph hbar (asis) number_of_workers_q1 number_of_workers_q4, over(order)
label define order 1 "{&le} 1.5" 6 "{&ge} 10", modify
graph hbar (asis) number_of_workers_q1 number_of_workers_q4, over(order)
答案 0 :(得分:1)
请注意,您的问题是关于调整分类轴。对于 graph bar
、graph hbar
和 graph dot
,幅度轴始终被视为 y 轴,无论它是垂直还是水平。这样做是为了让您可以在水平和垂直之间更改方向,而不必更改所有 y
选项和所有 x
选项。
这是使用 Stata Journal 中的 labmask
来实现的一种方法。
clear
input number_of_workers str8 income_bracket
24806 "<= 1.5"
31346 "1.5-2.9"
648409 "3"
389266 "3.01-4.9"
351963 "5-9.9"
271360 ">= 10"
end
gen order = _n
labmask order, values(income_bracket)
graph hbar (asis) number_of_workers, over(order)
label define order 1 "{&le} 1.5" 6 "{&ge} 10", modify
graph hbar (asis) number_of_workers, over(order)
如果您以正确的顺序定义值标签,然后使用 labmask
,则无需 encode
即可实现。
如上所述,您可以改进粗略的双符号 <=
和 >=
。