首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stata中的foreach命令

Stata中的foreach命令
EN

Stack Overflow用户
提问于 2020-06-22 19:02:34
回答 2查看 137关注 0票数 0

我使用的是面板数据,其中变量countrynum是138个国家的国家编号,icr是自变量。为了进行池化测试,我必须运行下面的代码来获得变量icr_1icr_2icr_3 ... icr_138

但是,代码只生成icr_1。有人能告诉我为什么吗?我需要全部138个变量。

代码语言:javascript
复制
xi, prefix(C) i.countrynum

gen Ccountrynum_1=1 if countrynum==1

replace Ccountrynum_1=0 if countrynum!=1

foreach var of varlist icr {
    foreach num of numlist 1(1)138{
        gen `var'_`num'=`var'* Ccountrynum_`num' 
    }
} 
EN

回答 2

Stack Overflow用户

发布于 2020-06-22 22:13:12

在你的代码中有一些我会做的不同的事情,但是我没有看到任何会导致错误的东西。与调试代码相比,我认为对您正在做的事情提出一种更简单的方法会更有用:

代码语言:javascript
复制
separate icr, by(countrynum)

xi是一个旧的命令,已经被因子变量表示法所取代,所以你只需要xi,以防你使用的是不支持它的旧命令,我认为这里不是这种情况。

据我所知,要进行池化测试,您可以使用i.countrynum运行回归,如下所示:

代码语言:javascript
复制
reg y x1 x2 x... i.countrynum
testparm i.countrynum

testparm的输出将告诉您这些国家的虚拟对象是否具有共同意义。

票数 1
EN

Stack Overflow用户

发布于 2020-06-22 22:38:44

我不容易理解这一点。我们首先要注意的是

代码语言:javascript
复制
gen Ccountrynum_1=1 if countrynum==1
replace Ccountrynum_1=0 if countrynum!=1

简化为

代码语言:javascript
复制
gen Ccountrynum_1 = countrynum == 1 

也就是说,双循环

代码语言:javascript
复制
foreach var of varlist icr {
    foreach num of numlist 1(1)138{
        gen `var'_`num'=`var'* Ccountrynum_`num' 
    }
} 

简化为单循环

代码语言:javascript
复制
forval num = 1/138 {
    gen icr_`num' = icr * Ccountrynum_`num' 
} 

也就是说,很难理解为什么要期望这些代码能够工作,因为您只解释了Ccountrynum_1的生成。

需要这么多额外的变量是很不寻常的。除了@Wouter Wakker的建议之外,tabulate, generate()还允许在必要时生成没有循环的指示器变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62512949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档