楼主: 不二老三
3616 3

[数据管理求助] STATA的forvalues循环上界可以是变量吗? [推广有奖]

本科生

79%

还不是VIP/贵宾

-

威望
0
论坛币
1490 个
通用积分
28.0763
学术水平
32 点
热心指数
35 点
信用等级
26 点
经验
2547 点
帖子
54
精华
0
在线时间
134 小时
注册时间
2015-6-5
最后登录
2022-3-24

楼主
不二老三 学生认证  发表于 2018-5-30 17:04:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我想用forvalues循环对2000-2012年的工业企业数据库进行匹配。前面几组循环都可以正常运行,连续两年的匹配也成功了。
最后一组我用了双重循环语句,希望在连续的两年(三年、四年、..、十二年)的数据基础上,加上一年匹配成连续的三年(四年、五年、...、十三年)数据。

这时,问题出现啦。最后一组循环的内层循环上界我用的y,y是根据外层的循环变量生成的。报错说语法错误。
以前在MATLAB的双层循环里用过这样的操作,我晓得为啥在STATA里就不行啦。


forval i = 2000/2012{
use "m`i'.dta",clear
gen match_id=id`i'              //match_id作为匹配变量
bysort match_id : drop if _N>1  //剔除match_id重复的样本
save "m`i'.ID.dta",replace
}
forval i = 2000/2012{  
    use "m`i'.ID.dta",clear  
    des,short     //简单描述下即将用于匹配的数据集
}   
*连续两年匹配
forval i = 2000/2011{
local t=`i'+1
use "m`i'.ID.dta",clear
merge 1:1 match_id using "m`t'.ID.dta"
keep if _merge == 3
drop _merge
save "matched2year.`i'-`t'.ID.dta",replace
}

*连续j年匹配,j=3,4,...,13
forval j = 3/13{
local y=2013-`j'
forval i = 2000/y{
  local k=`i'+1
  local t=`i'+2
  local j0=`j'-1
  use "matched`j0'year.`i'-`k'.ID.dta",clear
  merge 1:1 match_id using "m`t'.ID.dta"
  keep if _merge == 3
  drop _merge
  save "matched`j'year.`i'-`t'.ID.dta",replace
}
}
二维码

扫码加我 拉你入群

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

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

关键词:STATA forvalue 双层循环

沙发
不二老三 学生认证  发表于 2018-5-30 17:05:22
以前在MATLAB的双层循环里用过这样的操作,不晓得为啥在STATA里就不行啦。

藤椅
蓝色 发表于 2018-5-30 19:41:04
forval i = 2000/y{

缺引号吧

forval i = 2000/`y' {
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Stakiny + 2 + 2 + 2 热心帮助其他会员

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

板凳
不二老三 学生认证  发表于 2018-5-31 11:16:46 来自手机
蓝色 发表于 2018-5-30 19:41
forval i = 2000/y{

缺引号吧
嗯嗯,是这样的。问题解决啦。谢谢!
已有 1 人评分论坛币 收起 理由
happy_287422301 + 100 对论坛有贡献,分批次共奖励500币!

总评分: 论坛币 + 100   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-22 20:46