【问题标题】:Error when using foreach to cut out sample使用foreach剪切样本时出错
【发布时间】:2019-03-28 08:19:45
【问题描述】:

我想使用 foreach 使用 Stata 剪切相同的样本。

我写了如下代码sn-p:

foreach i of numlist 0/11 {
preserve
keep id projectno nickname
gen start=`i'*30000+1
gen end=(`i'+1)*30000
outsheet using d:\profile\nickname_`i'.xls in `start'/`end'
restore
}

但是,尽管我已经多次修改,但仍收到以下错误:

'/'无效的观察号

如何更正我的代码?

【问题讨论】:

  • 如果您觉得我的回答有帮助,请考虑使用上箭头进行投票并使用复选标记接受它。

标签: foreach stata stata-macros


【解决方案1】:

这不是一个完整的答案 - 并侧重于您问题的一个附带问题 - 但它不会轻易放入评论中。

连同其他地方解释的更改,我会将您的命令顺序更改为

preserve
keep id projectno nickname

forval i = 0/11 {
    local start= `i' * 30000 + 1
    local end = (`i' + 1) * 30000
    outsheet using d:\profile\nickname_`i'.xls in `start'/`end'
}

restore 

【讨论】:

    【解决方案2】:

    outsheet 命令中的in 语句是错误的,因为startend 是作为变量生成的,而不是 本地宏。您需要同时初始化startend,如下所示:

    local start = `i' * 30000 + 1
    local end = (`i' + 1) * 30000
    

    考虑以下使用 Stata 的 auto 玩具数据集的玩具示例:

    sysuse auto, clear
    
    foreach i of numlist 0/11 {
        preserve
        keep price mpg make
        local start = (`i' * 3) + 1
        local end = (`i' + 1) * 3
        list in `start' / `end'
        restore
    }
    

    结果:

         +---------------------------+
         | make          price   mpg |
         |---------------------------|
      1. | AMC Concord   4,099    22 |
      2. | AMC Pacer     4,749    17 |
      3. | AMC Spirit    3,799    22 |
         +---------------------------+
    
         +-----------------------------+
         | make            price   mpg |
         |-----------------------------|
      4. | Buick Century   4,816    20 |
      5. | Buick Electra   7,827    15 |
      6. | Buick LeSabre   5,788    18 |
         +-----------------------------+
    
         +------------------------------+
         | make             price   mpg |
         |------------------------------|
      7. | Buick Opel       4,453    26 |
      8. | Buick Regal      5,189    20 |
      9. | Buick Riviera   10,372    16 |
         +------------------------------+
    
         +------------------------------+
         | make             price   mpg |
         |------------------------------|
     10. | Buick Skylark    4,082    19 |
     11. | Cad. Deville    11,385    14 |
     12. | Cad. Eldorado   14,500    14 |
         +------------------------------+
    
         +-------------------------------+
         | make              price   mpg |
         |-------------------------------|
     13. | Cad. Seville     15,906    21 |
     14. | Chev. Chevette    3,299    29 |
     15. | Chev. Impala      5,705    16 |
         +-------------------------------+
    
         +---------------------------------+
         | make                price   mpg |
         |---------------------------------|
     16. | Chev. Malibu        4,504    22 |
     17. | Chev. Monte Carlo   5,104    22 |
     18. | Chev. Monza         3,667    24 |
         +---------------------------------+
    
         +------------------------------+
         | make             price   mpg |
         |------------------------------|
     19. | Chev. Nova       3,955    19 |
     20. | Dodge Colt       3,984    30 |
     21. | Dodge Diplomat   4,010    18 |
         +------------------------------+
    
         +-------------------------------+
         | make              price   mpg |
         |-------------------------------|
     22. | Dodge Magnum      5,886    16 |
     23. | Dodge St. Regis   6,342    17 |
     24. | Ford Fiesta       4,389    28 |
         +-------------------------------+
    
         +----------------------------------+
         | make                 price   mpg |
         |----------------------------------|
     25. | Ford Mustang         4,187    21 |
     26. | Linc. Continental   11,497    12 |
     27. | Linc. Mark V        13,594    12 |
         +----------------------------------+
    
         +---------------------------------+
         | make                price   mpg |
         |---------------------------------|
     28. | Linc. Versailles   13,466    14 |
     29. | Merc. Bobcat        3,829    22 |
     30. | Merc. Cougar        5,379    14 |
         +---------------------------------+
    
         +-----------------------------+
         | make            price   mpg |
         |-----------------------------|
     31. | Merc. Marquis   6,165    15 |
     32. | Merc. Monarch   4,516    18 |
     33. | Merc. XR-7      6,303    14 |
         +-----------------------------+
    
         +------------------------------+
         | make             price   mpg |
         |------------------------------|
     34. | Merc. Zephyr     3,291    20 |
     35. | Olds 98          8,814    21 |
     36. | Olds Cutl Supr   5,172    19 |
         +------------------------------+
    

    请注意,命令preservekeeprestore 不必在循环中,因为它们是一次性操作,重复它们只是效率低下。

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多