楼主: 帅炸苍穹7
1569 4

[统计软件与数据分析] Stata循环语句求助 [推广有奖]

  • 0关注
  • 0粉丝

初中生

80%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0.8252
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
33 点
帖子
2
精华
0
在线时间
42 小时
注册时间
2024-3-5
最后登录
2025-12-5

楼主
帅炸苍穹7 发表于 2025-8-23 11:29:40 |AI写论文
10论坛币
运行下方代码,最后报invalid syntax,求大佬指点
forvalues i = 1/`total_firms' {
    * 获取企业信息
    use "企业列表.dta", clear
    local current_stkcd = Stkcd[`i']
    local firm_min_year = min_year[`i']
    local firm_windows = possible_windows[`i']

    local processed_firms = `processed_firms' + 1

    if mod(`processed_firms', 50) == 1 {
        di "处理企业 `current_stkcd' (`processed_firms'/`total_firms')"
    }

    * 载入该企业的原始数据
    use "原始数据.dta", clear
    keep if !missing(Stkcd) & !missing(fyear) & !missing(quarter_num) & !missing(Sales)
    keep if Stkcd == `current_stkcd'

    * 检查数据是否存在
    qui count
    if r(N) > 0 {
        sort fyear quarter_num

        * 为该企业的每个窗口创建数据
        forvalues w = 1/`firm_windows' {
            * 重新载入企业数据
            use "原始数据.dta", clear
            keep if !missing(Stkcd) & !missing(fyear) & !missing(quarter_num) & !missing(Sales)
            keep if Stkcd == `current_stkcd'
            sort fyear quarter_num

            local window_start_year = `firm_min_year' + `w' - 1
            local window_end_year = `window_start_year' + 4

            keep if fyear >= `window_start_year' & fyear <= `window_end_year'
            qui count
            if r(N) == 20 {
                gen window_num = `w'
                gen window_start_year = `window_start_year'
                gen window_end_year = `window_end_year'
                gen window_id = string(`current_stkcd', "%06.0f") + "_w" + string(`w')

                * 添加到最终结果
                append using "最终结果.dta"
                save "最终结果.dta", replace
            }
        }
    }

    * 每100个企业显示进度
    if mod(`processed_firms', 100) == 0 {
        use "最终结果.dta", clear
        qui count
        di "已处理 `processed_firms' 个企业,累积数据量: " r(N)

        * 每500个企业保存备份
        if mod(`processed_firms', 500) == 0 {
            save "备份_企业`processed_firms'.dta", replace
            di "已保存备份:备份_企业`processed_firms'.dta"
        }
    }
}

关键词:Stata tata 循环语句 Processed forvalues
相关内容:stata循环语句求助

沙发
fanfunny 发表于 2025-8-23 13:07:40
最可能的错误是forvalues i = 1/total_firms'这一行中的total_firms`宏未被正确定义或引用。在Stata中,如果宏未定义,直接使用其名称(即使被反引号包围)也会导致语法错误。

藤椅
fanfunny 发表于 2025-8-23 13:16:40
forvalues i = 1/`total_firms'

看看引号是否配对,英文状态下的单引号

forvalues i = 1/'total_firms'

板凳
engly0 发表于 2025-8-25 09:59:08
第6行和第10行使用了花括号{}作为代码块分隔符,而Stata代码块分隔符应该是方括号[]

报纸
ericheadsome 发表于 2025-9-27 09:13:40
编译系统已经反馈:程序里有无效的语法
你这带中文的编程,很容易出现输入法导致的错误。建议把代码扔给人工智能检查一下,很快出结果。

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

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 22:11