尝试对变量X进行分类,该变量的值为82,值为0,介于1和6之间的值为118,介于7和12之间的值为0,介于13和18之间的值为0,介于19和24之间的值为0。
尝试以下代码:
gen X = .
replace X = 1 if Y >= 1 & Y <= 6
replace X = 2 if Y >= 7 & Y <= 12
replace X = 3 if Y >= 13 & Y <= 18
replace X = 4 if Y >= 19 & Y <= 24
我希望看到X分为0、1-6、7-12、13-18、19-24。而不只是0和1。 当前结果:
tab X
X Freq. Percent Cum.
0 82 41.00 41.00
1 118 59.00 100.00
Total 200 100.00
* Example generated by -dataex-. To install: ssc install dataex
clear
input int FID byte Y float X
150 0 0
17 0 0
95 1 1
0 0 0
18 0 0
1 0 0
96 0 0
54 0 0
172 3 1
97 0 0
57 1 1
19 0 0
98 1 1
151 0 0
99 1 1
2 3 1
197 1 1
55 2 1
58 1 1
100 0 0
end
答案 0 :(得分:1)
您的代码确实为您服务,也就是说,变量X
确实是您想要的变量Y
的正确类别集。
您仅看到X
在0.1范围内的事实,仅意味着数据具有no observations
,其中Y
属于其他类别。如果数据中有属于其他类别的Y
,则将显示X
的正确对应值。
实现此输出的直接方法如下所示。只需尝试一下。
egen YCat = cut(Y), at(0,1,7,13,19,25)
答案 1 :(得分:1)
您的代码看起来不错,但至关重要的是,代码中的任何内容都不会产生0 。
但是,我不同意@Romalpa Akzo关于推荐egen, cut()
的意见。即使是经验丰富的Stata用户,也不太可能记住该命令功能所使用的确切规则。
下限是>=
还是>
?在上述极限值之上和之下发生了什么?如果您不希望结果增加1怎么办?
我更喜欢显式代码。
这是另一种方式。根据程序员的理解,如果cond(A, B, C)
为真(非零),B
会产生A
,如果C
为假(零),则A
会产生{
clear
set obs 26
generate Y = _n - 1
generate X = cond(Y > 24, ., ///
cond(Y >= 19, 4, ///
cond(Y >= 13, 3, ///
cond(Y >= 7, 2, ///
cond(Y >= 1, 1, 0 )))))
tabulate Y X , missing
| X
Y | 0 1 2 3 4 . | Total
-----------+------------------------------------------------------------------+----------
0 | 1 0 0 0 0 0 | 1
1 | 0 1 0 0 0 0 | 1
2 | 0 1 0 0 0 0 | 1
3 | 0 1 0 0 0 0 | 1
4 | 0 1 0 0 0 0 | 1
5 | 0 1 0 0 0 0 | 1
6 | 0 1 0 0 0 0 | 1
7 | 0 0 1 0 0 0 | 1
8 | 0 0 1 0 0 0 | 1
9 | 0 0 1 0 0 0 | 1
10 | 0 0 1 0 0 0 | 1
11 | 0 0 1 0 0 0 | 1
12 | 0 0 1 0 0 0 | 1
13 | 0 0 0 1 0 0 | 1
14 | 0 0 0 1 0 0 | 1
15 | 0 0 0 1 0 0 | 1
16 | 0 0 0 1 0 0 | 1
17 | 0 0 0 1 0 0 | 1
18 | 0 0 0 1 0 0 | 1
19 | 0 0 0 0 1 0 | 1
20 | 0 0 0 0 1 0 | 1
21 | 0 0 0 0 1 0 | 1
22 | 0 0 0 0 1 0 | 1
23 | 0 0 0 0 1 0 | 1
24 | 0 0 0 0 1 0 | 1
25 | 0 0 0 0 0 1 | 1
-----------+------------------------------------------------------------------+----------
Total | 1 6 6 6 6 1 | 26
自然地,您可以将所有命令写在一行上,但是许多人会发现多行布局更易于理解和调试。对于嵌套函数调用,每个新条件都意味着在最后将所有括号括起来的承诺。
许多问题的Stata用户也喜欢使用类似问题中的多个命令,因此在很多选择背后都存在品味。