Stata 为什么在将连续变量转换为分类变量的过程中会生成缺失值?

Stata 为什么在将连续变量转换为分类变量的过程中会生成缺失值?,stata,Stata,我想转换一个连续变量avepr∈ [0,1]分为以下几类: 0 ≤ x < 0.1 0.1 ≤ x < 0.2 0.2 ≤ x < 0.3 0.3 ≤ x < 0.4 0.4 ≤ x < 0.5 0.5 ≤ x < 0.6 0.6 ≤ x < 0.7 0.7 ≤ x < 0.8 0.8 ≤ x < 0.9 0.9 ≤ x ≤ 1 如果我用1代替1.1,等于1的观测值将被忽略。这是确保不跳过1的值的正确方法吗 我还收到一条消息,显示生成

我想转换一个连续变量
avepr
∈ [0,1]分为以下几类:

  0 ≤ x < 0.1
0.1 ≤ x < 0.2
0.2 ≤ x < 0.3
0.3 ≤ x < 0.4
0.4 ≤ x < 0.5
0.5 ≤ x < 0.6 
0.6 ≤ x < 0.7
0.7 ≤ x < 0.8
0.8 ≤ x < 0.9
0.9 ≤ x ≤ 1
如果我用1代替1.1,等于1的观测值将被忽略。这是确保不跳过1的值的正确方法吗

我还收到一条消息,显示生成了2175个缺失值。我试图通过使用

tab aveprcat if avepr<=1, m
tab aveprcat,m

从统计上看,你只是在丢弃信息,很难想象为什么这会吸引你

就Stata而言:您希望将变量存储在[0,1]上,以.1的间隔向下舍入。我根本不会使用
egen,cut()
,尤其是因为查找和键入语法非常繁琐;更重要的是,我更喜欢明确描述边界处发生的事情的语法。给定这样一个变量
y

gen y2 = floor(10 * y)/10
这将是我的第一个电话,虽然精确的1s将映射为1s,这并不是你想要的

你对这些缺失的探索并没有告诉我们太多关于它们存在的事实。试一试

tab avepr if missing(aveprcat)
su avepr if missing(aveprcat), detail 

从统计上看,你只是在丢弃信息,很难想象为什么这会吸引你

就Stata而言:您希望将变量存储在[0,1]上,以.1的间隔向下舍入。我根本不会使用
egen,cut()
,尤其是因为查找和键入语法非常繁琐;更重要的是,我更喜欢明确描述边界处发生的事情的语法。给定这样一个变量
y

gen y2 = floor(10 * y)/10
这将是我的第一个电话,虽然精确的1s将映射为1s,这并不是你想要的

你对这些缺失的探索并没有告诉我们太多关于它们存在的事实。试一试

tab avepr if missing(aveprcat)
su avepr if missing(aveprcat), detail 

我将尝试补充@NickCox给出的答案,但前提是原始海报仍然对遗漏的来源有疑问

我认为,要认识到的最重要的事情是,Stata中缺失的值被认为是“非常大的数字”。一旦理解了这一点,神秘感就会消失

对于
egen,cut()
,如果某个值不在切割指定的范围内,则代码将生成一个缺失值。该值可能是缺失值(我们刚才说它被认为是一个非常大的数字)或任意非缺失值。关于遗漏,Nick的代码将给出完全相同的结果,但如果存在超出范围的未遗漏,则不再适用。例如:

clear all
set more off

*----- example data -----

set obs 15
set seed 2134976

gen x = runiform()
replace x = 2.5 in 5  // this is an out-of-range non-missing
replace x = . in 10   // this is a missing

list

*----- cut -----

egen xcut = cut(x),at(0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1.1)
gen xnick = floor(10 * x)/10

sort x
list

为什么这两张桌子

tabulate aveprcat if avepr <= 1, missing
tabulate aveprcat, missing

第二个命令要求制表
xcut
只有当
x我会尝试补充@NickCox给出的答案,但前提是原始海报仍然对遗漏的来源有疑问

我认为,要认识到的最重要的事情是,Stata中缺失的值被认为是“非常大的数字”。一旦理解了这一点,神秘感就会消失

对于
egen,cut()
,如果某个值不在切割指定的范围内,则代码将生成一个缺失值。该值可能是缺失值(我们刚才说它被认为是一个非常大的数字)或任意非缺失值。关于遗漏,Nick的代码将给出完全相同的结果,但如果存在超出范围的未遗漏,则不再适用。例如:

clear all
set more off

*----- example data -----

set obs 15
set seed 2134976

gen x = runiform()
replace x = 2.5 in 5  // this is an out-of-range non-missing
replace x = . in 10   // this is a missing

list

*----- cut -----

egen xcut = cut(x),at(0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1.1)
gen xnick = floor(10 * x)/10

sort x
list

为什么这两张桌子

tabulate aveprcat if avepr <= 1, missing
tabulate aveprcat, missing

第二个命令要求制表
xcut
仅当
x[tab avepr if missing(aveprcat)]和[su avepr if missing(aveprcat),detail]未产生任何观察结果时,即使Stata明确指出生成了缺失值。您应该尝试
制表的
missing
选项。这意味着您缺少了
avepr
[gen y2=floor(10*y)/10]的值-看起来这段代码生成的信息与[egen,cut]相同,缺少的值为2175个。@Olga,一个可复制的示例可能会有所帮助。当然,但要简单得多![tab avepr if missing(aveprcat)]和[su avepr if missing(aveprcat),detail]不产生任何观察结果,即使Stata明确指出生成了缺失值。您应该尝试
表格中的
缺失
选项。这意味着您缺少了
avepr
[gen y2=floor(10*y)/10]的值-看起来这段代码生成的信息与[egen,cut]相同,缺少的值为2175个。@Olga,一个可复制的示例可能会有所帮助。当然,但要简单得多!使用
egen,cut()
,任何不在指定切割范围内的值都将导致丢失。因此,您不需要使用missing来生成代码中的missing。运行
制表avepr,missing
,您应该有2175个不在[0,1]中的值。这包括失踪和未失踪。缺失被认为是不在切割范围内的“非常大的数字”,因此
egen,cut()
将产生缺失。@Nick的代码(关于缺失)也会产生类似的结果。为什么这两个表又不同的问题与缺失被认为是一个非常大的数字有关<代码>选项卡aveprcat如果AVEPR使用
egen,cut()
,任何不在指定切割范围内的值都将导致丢失。因此,您不需要使用missing来生成代码中的missing。运行
制表avepr,missing
,您应该有2175个不在[0,1]中的值。这包括失踪和未失踪。缺失被认为是不在切割范围内的“非常大的数字”,因此
egen,cut()
将产生缺失。@Nick的代码(关于缺失)也会产生类似的结果。为什么这两个表又不同的问题与缺失被认为是一个非常大的数字有关<代码>选项卡aveprcat,如果我们的解释有帮助。谢谢。你的解释很有帮助。非常感谢。
tabulate aveprcat if avepr <= 1, missing
tabulate aveprcat, missing
. tabulate xcut, missing

       xcut |      Freq.     Percent        Cum.
------------+-----------------------------------
          0 |          3       20.00       20.00
         .1 |          2       13.33       33.33
         .2 |          2       13.33       46.67
         .4 |          1        6.67       53.33
         .5 |          1        6.67       60.00
         .6 |          3       20.00       80.00
         .8 |          1        6.67       86.67
         .9 |          1        6.67       93.33
          . |          1        6.67      100.00
------------+-----------------------------------
      Total |         15      100.00

. tabulate xcut if x <= 1, missing

       xcut |      Freq.     Percent        Cum.
------------+-----------------------------------
          0 |          3       21.43       21.43
         .1 |          2       14.29       35.71
         .2 |          2       14.29       50.00
         .4 |          1        7.14       57.14
         .5 |          1        7.14       64.29
         .6 |          3       21.43       85.71
         .8 |          1        7.14       92.86
         .9 |          1        7.14      100.00
------------+-----------------------------------
      Total |         14      100.00