Stata 用零值对变量进行分类
尝试将82个值的变量X分类为0,118个值介于1和6之间,0个值介于7和12之间,0个值介于13和18之间,0个值介于19和24之间 尝试了以下代码:Stata 用零值对变量进行分类,stata,Stata,尝试将82个值的变量X分类为0,118个值介于1和6之间,0个值介于7和12之间,0个值介于13和18之间,0个值介于19和24之间 尝试了以下代码: 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 &
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
确实是变量Y
的正确类别集X
,这一事实仅仅意味着数据没有观察值
,而Y
属于其他类别。如果数据中有任何Y
属于其他类别,则会显示X
的正确对应值egen YCat = cut(Y), at(0,1,7,13,19,25)
X
确实是变量Y
的正确类别集X
,这一事实仅仅意味着数据没有观察值
,而Y
属于其他类别。如果数据中有任何Y
属于其他类别,则会显示X
的正确对应值egen YCat = cut(Y), at(0,1,7,13,19,25)
您的代码看起来不错,但关键的是,代码中没有任何内容会产生0 但是,我不同意@Romalpa Akzo推荐
egen,cut()
。即使是有经验的Stata用户也不太可能记住该命令功能所使用的确切规则。
尤其是下限是=
还是
?在上述极值的上方和下方会发生什么?如果你不想让结果上升怎么办
我更喜欢显式代码
这里有另一种方法。如果程序员理解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用户也喜欢使用问题中提到的多个命令,因此许多选择背后都有味觉 您的代码看起来不错,但关键的是,代码中没有任何内容会产生0 但是,我不同意@Romalpa Akzo推荐
egen,cut()
。即使是有经验的Stata用户也不太可能记住该命令功能所使用的确切规则。
尤其是下限是=
还是
?在上述极值的上方和下方会发生什么?如果你不想让结果上升怎么办
我更喜欢显式代码
这里有另一种方法。如果程序员理解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用户也喜欢使用问题中提到的多个命令,因此许多选择背后都有味觉 如果我是诚实的,我不清楚你想要什么。嗨,我想把X分为5类,标记为0,1,2,3,4。其中,X=0,如果Y=0,如果Y在1和6之间,X=1,如果Y在7和12之间,X=2,如果Y在13和18之间,X=3,如果Y在19和24之间,X=4。但是由于我的Y值都不超过6,上面的代码显示了X被分类为0,1,而不是X被分类为0,1,2,3,4。希望有帮助。当你说Y是否在1到6之间时,你是指数值还是观察值?如果是指数值,你的问题就没有意义了。在这种情况下,如果类别2和类别4都为0,您如何区分它们?不用担心。感谢您的时间,我发现如果这些类别中的所有值都为零,它不会显示类别。如果我诚实,我不清楚您想要什么。嗨,我想将X分类为5个类别,标记为0,1,2,3,4。其中,X=0,如果Y=0,如果Y在1和6之间,X=1,如果Y在7和12之间,X=2,如果Y在13和18之间,X=3,如果Y在19和24之间,X=4。但是由于我的Y值都不超过6,上面的代码显示了X被分类为0,1,而不是X被分类为0,1,2,3,4。希望有帮助。当你说Y是否在1到6之间时,你是指数值还是观察值?如果是指数值,你的问题就没有意义了。在这种情况下,如果类别2和类别4都为0,您如何区分它们?不用担心。谢谢你的时间,我发现如果类别中的所有值都为零,它就不会显示类别。非常感谢尼克·考克斯老师,谢谢你的完美版本。非常感谢尼克·考克斯老师,谢谢你的完美版本。