Stata 将变量从字符串转换为数字

Stata 将变量从字符串转换为数字,stata,Stata,我正在尝试将二进制变量从字符串(例如“男性”或“女性”)转换为二进制(0和1)。我尝试了以下方法: replace q1=1 if q1=="Female" 但是我得到了以下错误:类型不匹配。问题是什么?如何解决 请注意,我不想创建新变量,只想有条件地替换现有变量中的值。很遗憾,您不能这样做。您必须创建一个新变量。 问题在于q1当前是字符串类型。因此它不能存储这样的数字数据 为什么不创建一个新变量,然后“删除”旧变量 encode q1, gen(q1b) drop q1

我正在尝试将二进制变量从字符串(例如“男性”或“女性”)转换为二进制(0和1)。我尝试了以下方法:

replace q1=1 if q1=="Female"
但是我得到了以下错误:
类型不匹配
。问题是什么?如何解决


请注意,我不想创建新变量,只想有条件地替换现有变量中的值。

很遗憾,您不能这样做。您必须创建一个新变量。 问题在于
q1
当前是字符串类型。因此它不能存储这样的数字数据

为什么不创建一个新变量,然后“删除”旧变量

encode q1, gen(q1b)
drop q1
ren q1b q1

不幸的是,你不能那样做。您必须创建一个新变量。 问题在于
q1
当前是字符串类型。因此它不能存储这样的数字数据

为什么不创建一个新变量,然后“删除”旧变量

encode q1, gen(q1b)
drop q1
ren q1b q1

我找到了解决方案:将其转换为一个数字类型字符串,并使用
destring
命令

replace q1="1" if q1=="Female"
destring q1, replace

我找到了解决方案:将其转换为一个数字类型字符串,并使用
destring
命令

replace q1="1" if q1=="Female"
destring q1, replace

谢谢你的快速回复!这是因为我有多个性别变量,我想保持顺序。您知道如何左右移动列吗?您可以使用命令“order”。这将按照您提供的顺序对变量进行排序,最后保留所有未命名的变量。假设您有以下变量列表:a b c d e,但您希望“e和d”排在第一位,您可以执行“order e d”这将保留变量,因为您可以将数字字符存储在字符串中,因此使用
“1”
作为替换将是合法的(但没有帮助)默认情况下,
encode
将创建整数1,其中的值标签由提供的字符串组成。如问题所述,出于统计目的,人们通常更喜欢值为0和1的指标(通常称为虚拟变量)。通过在
encode
之前明确定义值标签,您可以通过
encode
实现这一点。也给出了详细的讨论。谢谢您的快速回复!这是因为我有多个性别变量,我想保持顺序。您知道如何左右移动列吗?您可以使用命令“order”。这将按照您提供的顺序对变量进行排序,最后保留所有未命名的变量。假设您有以下变量列表:a b c d e,但您希望“e和d”排在第一位,您可以执行“order e d”这将保留变量,因为您可以将数字字符存储在字符串中,因此使用
“1”
作为替换将是合法的(但没有帮助)默认情况下,
encode
将创建整数1,其中的值标签由提供的字符串组成。如问题所述,出于统计目的,人们通常更喜欢值为0和1的指标(通常称为虚拟变量)。通过在
encode
之前明确定义值标签,您可以通过
encode
实现这一点。也给出了详细的讨论。这不是最好的解决方案。有价值标签是一个好主意,有时甚至是必不可少的。研究者或读者如何知道1是女性的意思。请参阅其他回复。您完全正确!我所做的只是写了一些类似于
标签var1“female=1”
。我是在解决问题后才看到你的评论的,但是因为它看起来更优雅,我下次会尝试。更新:我添加了价值标签和变量标签,这不是最好的解决方案。有价值标签是一个好主意,有时甚至是必不可少的。研究者或读者如何知道1是女性的意思。请参阅其他回复。您完全正确!我所做的只是写了一些类似于
标签var1“female=1”
。我是在解决问题后才看到你的评论的,但是因为它看起来更优雅,我下次会尝试。更新:我添加了值标签和变量标签