全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
9918 5
2018-07-15
悬赏 30 个论坛币 未解决




在Stata宽面板数据中,我有84个变量:a1,a2,a3,......,a84。要求计算如下的结果:a1+a2+a3,a4+a5+a6,......,a82+a83+a84。每三个变量值相加,如何用循环做?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-7-15 15:47:13
已解决,自己写了个程序算是抛砖引玉:
forvalue i=1(3) 84{
  local j=`i'+1
  local k=`i'+2
  gen b`i' =a`i'+a`j'+a`k'
}
如果新生成的变量b需要按下标从小到大排列的话,继续执行下面的程序
forvalue i=1(1) 28{
  local h=`i'*3-2
  rename b`h' b`i'
}
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-3-11 15:38:49
凡雪 发表于 2018-7-15 15:47
已解决,自己写了个程序算是抛砖引玉:
forvalue i=1(3) 84{
  local j=`i'+1
高级,学习了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-1-15 10:41:39
请问楼主,问什么要把local语句写在大括号里面啊?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-3-9 15:30:53
凡雪 发表于 2018-7-15 15:47
已解决,自己写了个程序算是抛砖引玉:
forvalue i=1(3) 84{
  local j=`i'+1
楼主,想请教一下,如果想继续循环,从2开始计算:a2+a3+a4, a5+a6+a7...,然后再从3开始计算,a3+a4+a5, a4+a5+a6...应该怎么写语句呢?感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-10-24 21:28:55
在Stata中处理这种类型的循环操作时,可以使用`forvalues`命令。下面是一种可能的实现方式:

```stata
* 假设你的数据已经被正确加载到Stata环境中

local N = 84 // 定义变量总数为84个

// 开始循环,每次增加3来取三个变量相加
forvalues i=1(3)`N'-2 {
    local j = `i' + 2   // 确定序列中的第三个变量的序号
   
    // 创建新变量,名为sum`i'(例如:sum1, sum4...)
    gen sum`i' = a`i' + a`=`i'+1' + a`j'
   
    // 显示生成的新变量名称和对应的计算公式
    di "创建了新的变量: sum`i', 公式为: a`i' + a`=`i'+1' + a`j'"
}

// 为了完整性,检查最后一个变量组(确保总数可以被3整除)
if (`N' % 3 == 0) {
    di "数据量满足每三个一组的条件"
}
else {
    di "注意:数据量不能完美地分成三等份,最后可能需要特殊处理"
}

// 显示生成的所有新变量
list sum1-sum82 in 1/5, noobs // 假设你的观察值数量足够多
```

这段代码会根据你描述的需求创建从`sum1`到`sum82`的新变量(每三个原变量相加的结果)。注意,由于有84个变量,所以只能生成82个结果变量,因为最后两个变量(a83和a84)无法组成完整的三元组。如果你需要对剩余的变量进行特殊处理,请在循环结束后添加相应的代码。

这种做法不仅适用于你的特定需求,也展示了如何使用Stata中的循环来处理数据集中的大量变量或观察值。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群