Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用“存储结构断点”;foreach“;斯塔塔环路_Loops_Time Series_Regression_Stata_Panel Data - Fatal编程技术网

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
的超级粉丝。谢谢你们,杰西和尼克