了解本地命令在随机化检查中的使用
Understanding the use of local command in Randomization Check
我正在尝试 运行 一个 RCT 的 do-file。作者正在使用 local
命令。
他们创建了一个取值为 1 的本地宏。基于此,他们正在为 var 变量创建缺失值。但是,在那之后,我不明白为什么他们要加 1。此外,为什么 numvar
和 numvarse
用于 mean 和 sd?
任何解释都会很有帮助。
代码:
*RANDOMIZATION CHECK
local numvar=1
foreach var in T1_Client_Age T1_Client_Married T1_HH_Size T1_Client_Literate T1_Client_Education T1_muslim ///
T1_Hindu_SC_Kat T1_rest3 T1_Log_HH_Income T1_Household_Business ///
T1_Client_Wage_Salaried_2 T1_Client_Bus_PR_Employed_2 T1_Client_Housewife_2 {
replace `var'=. if miss_`var'==1
local numvarse = `numvar' + 1
replace varname="`var'" in `numvar'
*MEAN AND SD FOR CONTROL
quietly: sum `var' if Treated_All==0
replace Control=r(mean) in `numvar'
replace Control=r(sd) in `numvarse'
*MEAN AND SD FOR TREATED
quietly:sum `var' if Treated_All==1
replace Treat=r(mean) in `numvar'
replace Treat=r(sd) in `numvarse'
*MEAN AND SD FOR TREATED WITH FRIEND
quietly:sum `var' if Treatment_Peer==1
replace Treat_Peer=r(mean) in `numvar'
replace Treat_Peer=r(sd) in `numvarse'
*MEAN DIFFERENCES BETWEEN TREATED AND CONTROL
xi:reg `var' Treated_All i.sewa_center*i.baseline i.t_month , cluster(t_group)
replace Diff_Control_Treat=_b[Treated_All] in `numvar'
replace Diff_Control_Treat=_se[Treated_All] in `numvarse'
*MEAN DIFFERENCES BETWEEN TREATED ALONE AND WITH FRIEND
xi:reg `var' Treated_All Treatment_Peer i.sewa_center*i.baseline i.t_month , cluster(t_group)
replace Diff_Alone_Peer=_b[Treatment_Peer] in `numvar'
replace Diff_Alone_Peer=_se[Treatment_Peer] in `numvarse'
local numvar = `numvarse' + 1
}
原理看几条命令就明白了
local numvar=1
foreach var in ... {
replace `var'=. if miss_`var'==1
local numvarse = `numvar' + 1
replace varname="`var'" in `numvar'
*MEAN AND SD FOR CONTROL
quietly: sum `var' if Treated_All==0
replace Control=r(mean) in `numvar'
replace Control=r(sd) in `numvarse'
*MEAN AND SD FOR TREATED
quietly:sum `var' if Treated_All==1
replace Treat=r(mean) in `numvar'
replace Treat=r(sd) in `numvarse'
*MEAN AND SD FOR TREATED WITH FRIEND
quietly:sum `var' if Treatment_Peer==1
replace Treat_Peer=r(mean) in `numvar'
replace Treat_Peer=r(sd) in `numvarse'
local numvar = `numvarse' + 1
}
numvar
初始化为 1。在循环中,numvarse
比 numvar
.
设置为 1
代码然后将一系列变量中的每一个的结果放入观察 numvar
和 numvarse
中,包括变量的名称及其平均值和各组的 SD。
重点在于
replace ... in ...
其中 in
限定符仅在该观察中指定 replace
。
接近循环的末尾 numvar
再次发生碰撞。
简而言之,第一个名为 go 的变量在观察 1 和观察 2 中的结果;对于观察 3 和 4 中名为 go 的第二个变量;等等。
至少,这个过程取决于
有足够的观察结果证明这是可能的。我数了 13 个变量,所以数据集中至少有 26 个观测值,这似乎是极有可能的。
据了解,写入的变量不与任何其他变量对齐。
有些人可能会发现#2 甚至#1 糟糕的工作方式。他们希望将结果写入新的数据集或新的 frame
.
代码不是最先进的:使用 xi
和 xtreg
自 Stata 11 (2009) 以来已经过时了,但仍然适用于许多目的。
(详细信息:如果单独有一个变量 miss_
X 表示变量 X 丢失,则代码会用 missing 覆盖变量 X 中的值。我认为任何远程观察者都无法解释这一点。)
我正在尝试 运行 一个 RCT 的 do-file。作者正在使用 local
命令。
他们创建了一个取值为 1 的本地宏。基于此,他们正在为 var 变量创建缺失值。但是,在那之后,我不明白为什么他们要加 1。此外,为什么 numvar
和 numvarse
用于 mean 和 sd?
任何解释都会很有帮助。
代码:
*RANDOMIZATION CHECK
local numvar=1
foreach var in T1_Client_Age T1_Client_Married T1_HH_Size T1_Client_Literate T1_Client_Education T1_muslim ///
T1_Hindu_SC_Kat T1_rest3 T1_Log_HH_Income T1_Household_Business ///
T1_Client_Wage_Salaried_2 T1_Client_Bus_PR_Employed_2 T1_Client_Housewife_2 {
replace `var'=. if miss_`var'==1
local numvarse = `numvar' + 1
replace varname="`var'" in `numvar'
*MEAN AND SD FOR CONTROL
quietly: sum `var' if Treated_All==0
replace Control=r(mean) in `numvar'
replace Control=r(sd) in `numvarse'
*MEAN AND SD FOR TREATED
quietly:sum `var' if Treated_All==1
replace Treat=r(mean) in `numvar'
replace Treat=r(sd) in `numvarse'
*MEAN AND SD FOR TREATED WITH FRIEND
quietly:sum `var' if Treatment_Peer==1
replace Treat_Peer=r(mean) in `numvar'
replace Treat_Peer=r(sd) in `numvarse'
*MEAN DIFFERENCES BETWEEN TREATED AND CONTROL
xi:reg `var' Treated_All i.sewa_center*i.baseline i.t_month , cluster(t_group)
replace Diff_Control_Treat=_b[Treated_All] in `numvar'
replace Diff_Control_Treat=_se[Treated_All] in `numvarse'
*MEAN DIFFERENCES BETWEEN TREATED ALONE AND WITH FRIEND
xi:reg `var' Treated_All Treatment_Peer i.sewa_center*i.baseline i.t_month , cluster(t_group)
replace Diff_Alone_Peer=_b[Treatment_Peer] in `numvar'
replace Diff_Alone_Peer=_se[Treatment_Peer] in `numvarse'
local numvar = `numvarse' + 1
}
原理看几条命令就明白了
local numvar=1
foreach var in ... {
replace `var'=. if miss_`var'==1
local numvarse = `numvar' + 1
replace varname="`var'" in `numvar'
*MEAN AND SD FOR CONTROL
quietly: sum `var' if Treated_All==0
replace Control=r(mean) in `numvar'
replace Control=r(sd) in `numvarse'
*MEAN AND SD FOR TREATED
quietly:sum `var' if Treated_All==1
replace Treat=r(mean) in `numvar'
replace Treat=r(sd) in `numvarse'
*MEAN AND SD FOR TREATED WITH FRIEND
quietly:sum `var' if Treatment_Peer==1
replace Treat_Peer=r(mean) in `numvar'
replace Treat_Peer=r(sd) in `numvarse'
local numvar = `numvarse' + 1
}
numvar
初始化为 1。在循环中,numvarse
比 numvar
.
代码然后将一系列变量中的每一个的结果放入观察 numvar
和 numvarse
中,包括变量的名称及其平均值和各组的 SD。
重点在于
replace ... in ...
其中 in
限定符仅在该观察中指定 replace
。
接近循环的末尾 numvar
再次发生碰撞。
简而言之,第一个名为 go 的变量在观察 1 和观察 2 中的结果;对于观察 3 和 4 中名为 go 的第二个变量;等等。
至少,这个过程取决于
有足够的观察结果证明这是可能的。我数了 13 个变量,所以数据集中至少有 26 个观测值,这似乎是极有可能的。
据了解,写入的变量不与任何其他变量对齐。
有些人可能会发现#2 甚至#1 糟糕的工作方式。他们希望将结果写入新的数据集或新的 frame
.
代码不是最先进的:使用 xi
和 xtreg
自 Stata 11 (2009) 以来已经过时了,但仍然适用于许多目的。
(详细信息:如果单独有一个变量 miss_
X 表示变量 X 丢失,则代码会用 missing 覆盖变量 X 中的值。我认为任何远程观察者都无法解释这一点。)