If statement 如何将'if'与Stata中的本地宏一起使用?
我试图将2012年的If statement 如何将'if'与Stata中的本地宏一起使用?,if-statement,local,stata,If Statement,Local,Stata,我试图将2012年的收入分配给当地人。因此,本地val_AK在“AK”州的值为income,val_AL在“AL”州的值为income。。。。这是你的电话号码 以下代码生成aknotfoundr(111)但是AK确实存在于新南威尔士州中,这是一个字符串变量: foreach i in "AK" "AL" "AR" "AZ" { if (state_nsw=="`i'" & year==2012) { local val_`i'=income} } 我还尝试使用了以下
收入
分配给当地人。因此,本地val_AK
在“AK”州的值为income
,val_AL
在“AL”州的值为income
。。。。这是你的电话号码
以下代码生成aknotfoundr(111)
但是AK
确实存在于新南威尔士州中,这是一个字符串变量:
foreach i in "AK" "AL" "AR" "AZ" {
if (state_nsw=="`i'" & year==2012) { local val_`i'=income}
}
我还尝试使用了以下方法:
if (state_nsw=="`i'" ...
...
// and got invalid name r(198)
我的错误在哪里?我仍然无法打开数据。请尝试以下操作:
foreach i in "AK" "AL" "AR" "AZ"{
gen val_`i'=income if state_nsw=="`i'" & year==2012
local val `val' val_`i'
}
Sample data and output:
state val year
AK 13 2010
AL 112 2010
AR 12 2010
AZ 14 2010
val_AK val_AL val_AR val_AZ
13
112
12
14
我仍然无法打开数据。请尝试以下操作:
foreach i in "AK" "AL" "AR" "AZ"{
gen val_`i'=income if state_nsw=="`i'" & year==2012
local val `val' val_`i'
}
Sample data and output:
state val year
AK 13 2010
AL 112 2010
AR 12 2010
AZ 14 2010
val_AK val_AL val_AR val_AZ
13
112
12
14
由于state\u nsw
是一个字符串变量,因此只能与文本字符串或另一个字符串变量进行比较
简化到循环中的第一个值
foreach i in "AK" {
if (state_nsw == `i' & year == 2012) { local val_`i'=income }
}
内部语句被解释为
if (state_nsw == AK & year == 2012) { local val_AK = income }
local val_`i' = income[1]
现在就Stata而言,AK
不是一个文本字符串,因此它只能是字符串变量的名称。但是你没有这样的变量,这就是为什么你会犯这样的错误。更合适的是
if (state_nsw == "AK" & year == 2012) { local val_AK = income }
或者,更一般地说
if (state_nsw == "`i'" & year == 2012) { local val_`i'=income }
那么,为什么会出现错误无效名称r(198):
通过查看您的代码,我无法回答这个问题,但请参见下文
你的麻烦还没有结束。你的代码很混乱
if
语句将参照第一次观察进行解释。这一点在
- 同样地
local val_`i' = income
将始终被解释为
if (state_nsw == AK & year == 2012) { local val_AK = income }
local val_`i' = income[1]
不管if
命令如何
- 如果
自第8版以来已过期,并且可能无法按照您的意愿工作,则将{}放在之后的同一行上李>
应该起作用的是
foreach i in AK AL AR AZ {
su income if year == 2012 & state_nsw == "`i'", meanonly
local val_`i' = r(mean)
}
虽然你为什么要这么做是个谜 由于新南威尔士州是一个字符串变量,因此只能与文字字符串或其他字符串变量进行比较
简化到循环中的第一个值
foreach i in "AK" {
if (state_nsw == `i' & year == 2012) { local val_`i'=income }
}
内部语句被解释为
if (state_nsw == AK & year == 2012) { local val_AK = income }
local val_`i' = income[1]
现在就Stata而言,AK
不是一个文本字符串,因此它只能是字符串变量的名称。但是你没有这样的变量,这就是为什么你会犯这样的错误。更合适的是
if (state_nsw == "AK" & year == 2012) { local val_AK = income }
或者,更一般地说
if (state_nsw == "`i'" & year == 2012) { local val_`i'=income }
那么,为什么会出现错误无效名称r(198):
通过查看您的代码,我无法回答这个问题,但请参见下文
你的麻烦还没有结束。你的代码很混乱
if
语句将参照第一次观察进行解释。这一点在
- 同样地
local val_`i' = income
将始终被解释为
if (state_nsw == AK & year == 2012) { local val_AK = income }
local val_`i' = income[1]
不管if
命令如何
- 如果
自第8版以来已过期,并且可能无法按照您的意愿工作,则将{}放在之后的同一行上李>
应该起作用的是
foreach i in AK AL AR AZ {
su income if year == 2012 & state_nsw == "`i'", meanonly
local val_`i' = r(mean)
}
虽然你为什么要这么做是个谜 在哪里定义了j
?请给我们工作的样本数据。谢谢@Metrics的回复j
是本年度的本地代码…我将更正上面的代码…我们可以忽略j…它工作正常…我刚刚更正了代码我很抱歉。你还收到错误吗?是的,我不知道为什么…我认为这与“`AK'”有关。你有样本数据要发布吗?在哪里定义了j
?请给我们工作的样本数据。谢谢@Metrics的回复j
是本年度的本地代码…我将更正上面的代码…我们可以忽略j…它工作正常…我刚刚更正了代码我很抱歉。你还收到错误吗?是的,我不知道为什么…我认为这与“`AK'”有关。你有样本数据要发布吗?@Metrics不起作用。充其量val
将只包含复制到它的最后一个字符串,val_AZ
,这是没有用的。我让它工作了,但问题是val
包含字符串,但income@Nick:谢谢。根据您的解决方案,此问题现已更正。@度量仍然不起作用。您正在累积字符串值(变量名),而不是它们包含的数值。此外,在任何情况下,试图在宏中放入数值变量都是徒劳的。您可以使用separate
更简洁地实现这一点。OP出于某种原因需要本地值。@无法使用的度量。充其量val
将只包含复制到它的最后一个字符串,val_AZ
,这是没有用的。我让它工作了,但问题是val
包含字符串,但income@Nick:谢谢。根据您的解决方案,此问题现已更正。@度量仍然不起作用。您正在累积字符串值(变量名),而不是它们包含的数值。此外,在任何情况下,试图在宏中放入数值变量都是徒劳的。您可以使用separate
更简洁地实现这一点。OP出于某种原因需要本地值。另外,请检查year
是否为字符串变量。谢谢。但它的工作方式并不是我想要的:本地val\u AL
并不存在。我试过:重新编码收入重量。='val'u AL'我得到了一个错误,“val'u AL”是未知的。这是没有意义的。您可能指的是`val_AL'
或`val_AK'
当您引用本地宏时,您需要打开和关闭引号。是的,这就是我的意思。这是一个我尝试过的输入法:重新编码income\u nsweight.=“val\u AL”-并在规则中获得unknow el。另外,检查year
是否为字符串变量。谢谢。但它的工作方式并不是我想要的:本地val\u AL
并不存在。我试过:重新编码收入重量。='val'u AL'我得到了一个错误,“val'u AL”是未知的。这是没有意义的。您可能指的是`val_AL'
或`val_AK'
当您引用本地宏时,您需要打开和关闭引号。是的,这就是我的意思。这是一个尝试的类型:重新计算收入