Loops 使用“存储结构断点”;foreach“;斯塔塔环路
我需要估计数据集中一系列国家的回归结构断点,我需要为每个国家存储这些盈亏平衡点,并在循环结束后以表格形式显示这些盈亏平衡点。我的数据集是面板数据,这就是为什么我需要在各个国家循环 我在国家列表的Loops 使用“存储结构断点”;foreach“;斯塔塔环路,loops,time-series,regression,stata,panel-data,Loops,Time Series,Regression,Stata,Panel Data,我需要估计数据集中一系列国家的回归结构断点,我需要为每个国家存储这些盈亏平衡点,并在循环结束后以表格形式显示这些盈亏平衡点。我的数据集是面板数据,这就是为什么我需要在各个国家循环 我在国家列表的countrynum变量中估计每个国家的回归。我尝试存储每个国家回归估计的盈亏平衡点,如下所示 read.csv("C:\Users\easy\Desktop\workbook.csv") Stata正在返回以下错误消息: foreach i in countrynum {
countrynum
变量中估计每个国家的回归。我尝试存储每个国家回归估计的盈亏平衡点,如下所示
read.csv("C:\Users\easy\Desktop\workbook.csv")
Stata正在返回以下错误消息:
foreach i in countrynum {
by countrynum, sort: reg y x1 x2 x3 if `i'== countrynum
est store `r'(breakdate)
}
你知道我的代码有什么问题吗?不幸的是,你的代码有很多错误,尽管你没有注意到各种错误,因为它们是意义上的错误,而不是语法上的错误 首先,
( invalid name
) invalid name
r(7);
是否不在countrynum
的不同值上触发循环。它是一个项目的循环,变量名为countrynum
`r(breakdate)'
所以你的测试变得
foreach i in countrynum {
这总是正确的,循环不是循环,而是等价于
if countrynum == countrynum
现在,下一个问题是,第一个命令运行了几个回归,但只有最后一个回归(最后一个命名的国家)的结果将保留在内存中
斯塔塔注意到的错误是,它不知道你所说的是什么意思
by countrynum, sort: reg y x1 x2 x3
est store `r'(breakdate)
看起来,您指的是需要额外语法才能获得的结果
`r'(breakdate)
积极的建议。使用
statsby
是一个更好的主意。您的代码有很多错误,不幸的是,尽管您没有注意到各种错误,因为它们是含义错误,而不是语法错误
首先,
( invalid name
) invalid name
r(7);
是否不在countrynum
的不同值上触发循环。它是一个项目的循环,变量名为countrynum
`r(breakdate)'
所以你的测试变得
foreach i in countrynum {
这总是正确的,循环不是循环,而是等价于
if countrynum == countrynum
现在,下一个问题是,第一个命令运行了几个回归,但只有最后一个回归(最后一个命名的国家)的结果将保留在内存中
斯塔塔注意到的错误是,它不知道你所说的是什么意思
by countrynum, sort: reg y x1 x2 x3
est store `r'(breakdate)
看起来,您指的是需要额外语法才能获得的结果
`r'(breakdate)
积极的建议。使用
statsby
是一个好得多的主意。假设Nick Cox恰当地给出了语法修正,那么在向Stata请求r(breakdate)
之前,您缺少的是sbsingle
或其他一些结构中断命令。之后,您可以执行类似的操作,假设您的面板由countrynum
标识
`r(breakdate)'
假设Nick Cox恰当地给出了语法修复,那么在向Stata请求
r(breakdate)
之前,您缺少的是sbsingle
或其他一些结构中断命令。之后,您可以执行类似的操作,假设您的面板由countrynum
标识
`r(breakdate)'
通解
我相信我有办法解决你的问题。由于使用了局部变量,该程序需要同时运行。这对我在美国宏观经济测试数据中起到了作用,我在其中观察了一半国家1和另一半国家2。只要您的数据已经是tsset
,它就应该适合您
* EX DATA
webuse usmacro, clear
tempfile append
save `append', replace
append using `append', gen(countrynum)
* Run By program (ssc install runby)
capture program drop panel_breakdate
program panel_breakdate
tsset date
regress fedfunds L.fedfunds
estat sbsingle
gen breakdate = r(breakdate)
end
runby panel_breakdate, by(countrynum) verbose
* After this format your breakdate how you please.
只要之前没有标量,它将返回语法为(break)(countrynum)
且不带括号的国家/地区的所有中断日期列表。如果这对您不起作用,请告诉我,没有您提供的任何示例数据是很困难的,但它在我的测试环境中起作用
例子
如果要在数据集上运行它之前了解其工作原理,请立即使用以下命令:
levelsof countrynum
foreach lev in `r(levels)' {
reg y x1 x2 x3 if countrynum == `lev'
estat sbsingle
scalar break`lev' = r(breakdate)
}
scalar list
通解
我相信我有办法解决你的问题。由于使用了局部变量,该程序需要同时运行。这对我在美国宏观经济测试数据中起到了作用,我在其中观察了一半国家1和另一半国家2。只要您的数据已经是tsset
,它就应该适合您
* EX DATA
webuse usmacro, clear
tempfile append
save `append', replace
append using `append', gen(countrynum)
* Run By program (ssc install runby)
capture program drop panel_breakdate
program panel_breakdate
tsset date
regress fedfunds L.fedfunds
estat sbsingle
gen breakdate = r(breakdate)
end
runby panel_breakdate, by(countrynum) verbose
* After this format your breakdate how you please.
只要之前没有标量,它将返回语法为(break)(countrynum)
且不带括号的国家/地区的所有中断日期列表。如果这对您不起作用,请告诉我,没有您提供的任何示例数据是很困难的,但它在我的测试环境中起作用
例子
如果要在数据集上运行它之前了解其工作原理,请立即使用以下命令:
levelsof countrynum
foreach lev in `r(levels)' {
reg y x1 x2 x3 if countrynum == `lev'
estat sbsingle
scalar break`lev' = r(breakdate)
}
scalar list
这个想法很好,但你需要在回归中使用
if
限定符,以避免一次又一次地得到相同的结果。作为levelsof
的原始作者,我认为它在statsby
中的频繁使用更简单,但感觉复杂!谢谢你指出这一点!我已经进行了必要的编辑。别担心,尼克,我是levelsof
的超级粉丝。谢谢你,杰西和尼克的帮助。Jesse,我试过你的代码,它可以工作,但会重复估计3次(等于级别数)。此外,我还试图发布我的数据集以供说明,但我不知道如何发布(很抱歉,我还是新手)。关于如何上传数据集以便您更清楚地了解我的问题,有什么帮助吗?非常感谢!在您的示例中,您的面板在日期上没有重叠,因此如果您要扩展到平衡面板,您将在tsset date
中得到一个重复的时间值错误,但是你需要在回归中使用if
限定符,以避免一次又一次地得到相同的结果。作为levelsof
的原始作者,我认为它在statsby
中的频繁使用更简单,但感觉复杂!谢谢你指出这一点!我已经进行了必要的编辑。别担心,尼克,我是levelsof
的超级粉丝。谢谢你们,杰西和尼克