为什么我在Stata中进行虚拟变量转换会产生类型不匹配?

问题描述 投票:0回答:1

我正在尝试用虚拟值1和0简单替换字符串“ Female”。我知道不允许从字符串转换。因此,我尝试通过以下方式进行转换:

    replace female =1 if female=="Female"

以这种方式

    replace female = "1" if female == "Female"

但都吐出错误项:

type mismatch
r(109);

我不确定如何解决此问题,我确定列出的第二个代码可以正常工作。

stata
1个回答
0
投票

隐含的是,与您的报告相反,变量female是数字。它可能贴有价值标签。

您没有提供数据示例,甚至没有提供describe的报告,但都可以重现这两个错误。

. clear

. set obs 2
number of observations (_N) was 0, now 2

. gen female = cond(_n == 1, 1, 0)

. label def female 1 female 0 male

. label val female female

. list

     +--------+
     | female |
     |--------|
  1. | female |
  2. |   male |
     +--------+

. replace female = "1" if female == "female"
type mismatch
r(109);

. replace female = 1 if female == "female"
type mismatch
r(109);

. d female

              storage   display    value
variable name   type    format     label      variable label
-------------------------------------------------------------------------------------------------------------
female          float   %9.0g      female     

即使错误消息相同,失败的原因也不同。

. replace female = "1" if female == "female"
 type mismatch
 r(109);

此操作失败,因为您试图用字符串female替换"1"的值,但是female是一个数字变量。 Stata不能达到female与字符串"female"的比较,由于相同的原因,比较可能会失败。

. replace female = 1 if female == "female"
type mismatch
r(109);

尝试使用数字值replace female尝试1很好,但是由于变量if female == "female"是数字,因此测试female乱序。

仍然存在您要做什么以及为什么要做的问题。从Stata的角度来看,理想的指标变量

[(a)是1或0

[(b)已分配值标签

(c)为值1的状态命名,因此,如果只有值1表示女性,则将其命名为female

因此,您可能不需要在这里做任何事情。

[我听过很多反复的演讲,演讲者被问及他们的指标gendersex往哪个方向走,却不知道,这是一个严重的错误。在this paper中可以找到更多讨论。

© www.soinside.com 2019 - 2024. All rights reserved.