【问题标题】:Invalid syntax in Stata putexcel loop?Stata putexcel循环中的语法无效?
【发布时间】:2021-12-13 03:06:38
【问题描述】:

我正在编写一个使用 putexcel 代码按年份导出数据的程序,但不确定错误出在以下位置:

* Create paired locals for years
    local year 2000 2001 2002 2003 2004 2005
    local col B D F H J L
    local name year1 year2 year3 year4 year5 year6
    
    * Count number of variables in local    
        local count: word count `year'
    
    * Loop through paired locals
        forval mycounter = 1/`count'{
            local myyear:   word `mycounter' of `year'
            local mycol:    word `mycounter' of `col'
            local myname:   word `mycounter' of `name'
        

        estpost tabstat variable1 if level == 1 & year == `myyear', stat(sum) 
        mat variable1_`myname' = e(sum)
        estpost tabstat variable2 if level == 4 & year == `myyear', stat(count)
        mat variable2_`myname' = e(count)
        
        mat vars_`myname' = variable1_`myname', variable2_`myname' 
        putexcel `mycol'7 = matrix(vars_`myname')

    
}

我收到“无效语法”错误。奇怪的是,该程序能够循环并为第 1 年到第 4 年创建矩阵。谁能帮我确定问题可能是什么?循环的编写方式或数据集本身可能有问题吗?非常感谢。

【问题讨论】:

  • 您能分享您的数据子集吗? (使用命令dataex 共享一些数据)由于您能够运行循环的前4 次迭代,因此很可能是您的数据中的某些内容而不是您的代码中的某些内容导致了此错误。如果您因任何原因无法共享数据,请尝试放弃第 5 年,看看您是否有同样的问题。或者删除第 1 年,看看它在第 4 年之后是否仍然崩溃,或者它是否在第 4 次迭代后崩溃,无论您的数据中的顺序如何等等。
  • 关于示例数据的相同点在您之前的帖子stackoverflow.com/questions/69946708/… 中提出,请通过接受或解释它如何无法回答您的问题来回复那里的答案。
  • 毕竟,如果您最好的猜测是问题出在您的数据中,而我的猜测也是如此,那么我们需要的信息就是您的数据。

标签: loops stata export-to-excel


【解决方案1】:

这不是答案,但不能很好地显示为评论。

我同意@TheIceBear 的观点,即一个可重现的例子会很有帮助。

您可以通过在每个阶段显示结果来极大地帮助自己,以查看您是否拥有您认为应该拥有的东西。

您的代码可以大大缩减。

  • 启动tabstat 然后通过estpost 推送结果几乎没有意义,因为您每次只需要summarize 直接给您的单个标量结果。

  • 创建大量的小矩阵几乎没有意义,每个矩阵都包含一个标量。

虽然我无法根据您的数据对此进行测试,但我认为这与您的意图很接近。请注意每次循环显示结果矩阵的精神。

local col B D F H J L
   
forval y = 2000/2005 {
    gettoken mycol col : col 
        
    su variable1 if level == 1 & year == `y'
    scalar sum1 = r(sum)
    su variable2 if level == 4 & year == `y'
       
    mat work = sum1, r(N) 
    mat list work 
    putexcel `mycol'7 = matrix(work)
}

Stata Journal 21(4) 即将在 2021 年 12 月底左右出现关于并行循环的专栏。该专栏中讨论了gettoken

现在编辑 2022 年 1 月 16 日,请参阅 https://journals.sagepub.com/doi/pdf/10.1177/1536867X211063415

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多