【问题标题】:Error when using string variables in the table command在 table 命令中使用字符串变量时出错
【发布时间】:2014-11-05 23:57:33
【问题描述】:

为什么当我在table 命令中使用字符串变量时,Stata 会报出一个神秘的错误?

考虑以下玩具示例:

sysuse auto, clear
decode foreign, g(foreign_str)
table foreign, contents(n foreign_str mean mpg)

这会在 Stata 13.1 中引发 r(111) variable __000002 not found 错误。

跟踪错误告诉我它正在尝试运行 format __000002 %9.0gc 并在找不到变量时崩溃。如果我在clist 中切换变量的顺序,即我运行table foreign, contents(n mpg_rank mean mpg),我会得到相同的错误,但使用__000003 而不是__000002

因此,Stata 似乎在找到字符串变量时崩溃了。如果我用数字变量替换字符串变量,则不会发生错误。

我知道计算字符串变量的汇总统计数据没有意义,但是计算字符串变量的观察次数(在 rowvar 指定的每个组中)非常有意义。

【问题讨论】:

  • 您可以使用table foreign, contents(freq mean mpg) 来解决这个问题。
  • @DimitriyV.Masterov 对,这正是我想要的;我主要好奇为什么Stata会抛出 this (在我看来)神秘错误。该函数似乎应该首先检查字符串变量,并抛出类型不匹配或字符串变量不支持错误,而不是变量未找到错误(因为变量显然存在)。
  • 很遗憾,我真的不知道答案。
  • @DimitriyV.Masterov 查看我关于为什么会在 Stata 13 中发生这种情况的回答。

标签: stata


【解决方案1】:

Stata 抱怨是因为 collapse 命令(table 在内部使用)未创建变量 __000002(或 __000003,如果您更改顺序)由于以下错误:

collapse (count) foreign_str
type mismatch
r(109);

用户看不到真正发生的事情,因为capturecollapse 结合使用,trace 的输出证实:

- capture collapse `clist' `wgt', by(`varlist' `by') fast `cw'
= capture collapse  (count) __000002=foreign_str (mean) __000003=mpg , by(foreign ) fast

只有错误代码111135的规定,所以table命令在找不到上述变量时会继续运行直到撞墙。

Stata 14 及更高版本检查用户在 contents() 选项中提供的变量,并且仅接受数字类型,如果不是这种情况,则会发出更多信息性错误消息。

还值得指出的是,collapse 在最近的 Stata 版本中对字符串的处理方式不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2015-08-10
    相关资源
    最近更新 更多