代码之家  ›  专栏  ›  技术社区  ›  user42459

编码后stata中的奇怪排序

  •  0
  • user42459  · 技术社区  · 6 年前

    变量x以前是字符串。所以我用 encode 使其非字符串的命令。

    但在那之后,当我排序时,它是这样排序的。

    1000
    10000
    10001
    10003
    10005
    1003
    

    但通常,应该像

    1000
    1001
    1003
    1005
    

    为什么整理之后会这么奇怪 编码 是吗?

    看起来 1003 创建自 编码 1003个 在里面 using 数据集被认为是不同的数字。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nick Cox    6 年前

    一点也不奇怪。就在上面 help encode 斯塔塔告诉你“不要用 encode 如果 变量名 包含恰好存储为字符串的数字”。

    编码 按字母顺序(此处为字母数字)将字符串映射到数字值1上(除非使用 label() 选项)。

    所以 "1000" 将在之前排序 "10000" 之前 "1001" 等等。

    你可能需要 destring 但是为什么变量被读取为字符串?这就是你需要担心的。

    编码 当您需要数字等价物时,用于字符串。所以 "cat" "dog" "frog" "toad" 将映射到1 2 3 4,字符串值将成为值标签。

    销毁 是错误的字符串。变量应该是数字,但读取数据时出错。那么,出了什么问题?常见错误包括

    1. 来自电子表格的标题数据应该是变量标签(或被忽略)作为数据读入。

    2. 丢失数据的代码,例如 NA 这对人们或其他程序来说是有意义的,但与失踪的stata表示不符。

    3. 某种垃圾。

    要检查问题,可以查看不会转换为数字的值:

     tab whatever if missing(real(whatever))