关于#Did#的问题,如何解决?(语言- Stata)

clear
set matsize 5000
mat b=J(500,1,0)
mat se=J(500,1,0)
mat p=J(500,1,0)

forvalues i=1/500{
use "C:\Users\Administrator\Desktop\安慰剂检验.dta",clear
xtset id year
keep if year==2015
sample 8,count
keep id
save matchid.dta,replace
merge 1:m id using "C:\Users\Administrator\Desktop\安慰剂检验.dta"
gen treat=(_merge==3)
save matchid`i'.dta,replace

use "C:\Users\Administrator\Desktop\安慰剂检验.dta"
bsample 1,strata(id)
keep year
save matchyear.dta,replace
mkmat year, matrix(sampleyear)

use matchidi'.dta,replace xtset id year gen time=0 foreach j of numlist 1/10{ replace time =1 if(id ==j' & year >= sampleyear[j',1]) } gen did1 = time*treat global x "lnx1 lnx2 lnx3 lnjck" qui reg lny lnx1 lnx2 lnx3 lnjck i.year i.id,r set matsize 5000 mat b[i',1] =_b[did1]
mat se[i',1] =_se[did1] scalar df_r=e(N)-e(df_m)-1 mat p[i',1]=2*ttail(df_r,abs(_b[did1] /_se[did1]))
}
在 mat b[`i',1] = _b[did1]出现
invalid syntax 实在不知道怎么弄了 请问一下我是哪里弄错了吗

检查下i左右符号是不是中文,或者全角半角这种问题

第7行出现了“invalid syntax”错误,很可能是语法错误或者符号写错了。建议检查语法和符号,特别是在等于号周围是否有空格导致语法错误。

如果您在使用 Stata 软件时遇到了 #Did# 的问题,那么您可以以下几种方法解决:

诊断数据:使用 Stata 命令 "diag" 来诊断数据的问题。如果数据出现缺失值、错误的数据类型等情况,该命令可以报告给您。

重新读入数据:如果您曾经编辑过数据,那么可以尝试重新读入该数据。

使用缺省值:使用 Stata 命令 "set missing" 来设置缺省值。

寻求帮助:如果上述方法都不能解决问题,您可以寻求其他用户或 Stata 官方的帮助。

以上方法可以帮助您解决 #Did# 问题。

该回答引用ChatGPT
_请参考下面的解决方案,如果有帮助,还请点击 “采纳” _
看起来这是一个Stata代码的问题,问题在于该语句“mat b[i',1] = _b[did1]”使用了错误的语法。正确的语法是“mat b[i',1] = e(_b[did1])”,这样才能正确计算_b[did1]的值。

提供参考实例:https://www.bilibili.com/read/cv13622958/
【你可对比下这个实例中的代码,主要看下标点符号,从现有对比来看是缺失了一个标点符号】

以下答案引用自GPT-3大模型,请合理使用:
There is no easy answer to this question. It depends on what you mean by "did." If you are asking if an event caused something else, then you would use a regression model. If you are asking if two variables are related, then you would use a correlation coefficient.

这个问题是由于Stata代码中的语法错误导致的。语句 mat b[i',1] = _b[did1]应该改成mat b[i,1] = _b[did1]`。即把两个单引号中的第一个单引号改为双引号即可。

正确的代码应该是:

  clear
set matsize 5000
mat b=J(500,1,0)
mat se=J(500,1,0)
mat p=J(500,1,0)

forvalues i=1/500{
use "C:\Users\Administrator\Desktop\安慰剂检验.dta",clear
xtset id year
keep if year==2015
sample 8,count
keep id
save matchid.dta,replace
merge 1:m id using "C:\Users\Administrator\Desktop\安慰剂检验.dta"
gen treat=(_merge==3)
save matchid`i'.dta,replace

use "C:\Users\Administrator\Desktop\安慰剂检验.dta"
bsample 1,strata(id)
keep year
save matchyear.dta,replace
mkmat year, matrix(sampleyear)

use matchid`i'.dta,replace xtset id year gen time=0 foreach j of numlist 1/10{ replace time =1 if(id == j & year >= sampleyear[j,1]) } gen did1 = time*treat global x "lnx1 lnx2 lnx3 lnjck" qui reg lny lnx1 lnx2 lnx3 lnjck i.year i.id,r set matsize 5000 mat b[i,1] = _b[did1]
mat se[i,1] = _se[did1] scalar df_r=e(N)-e(df_m)-1 mat p[i,1]=2*ttail(df_r,abs(_b[did1] /_se[did1]))
}