美文网首页
forvalues — 循环连续值

forvalues — 循环连续值

作者: 松柏林stata | 来源:发表于2019-05-01 04:28 被阅读0次

    Description

    forvalues重复地将 locallname 设置的 range 内的每个元素,执行括在大括号中的命令。 循环执行零次或多次。

    Syntax

    forvalues lname = range {
         Stata commands referring to `lname'
     }
    

    range 的定义

    #1(#d)#2: 意思是循环从#1到#2,步长为 d 。
    #1/#2: 意思是循环从#1到#2,步长为1 。
    #1 #t to #2: 意思是循环从#1到#2,步长为#t - #1。
    #1 #t : #2: 意思是循环从#1到#2,步长为#t - #1。
    当#d> 0,只要 “lname” 的值为<#2,就会执行循环。
    必须使用 forvalues 指定大括号,并且
    1. 开大括号必须出现在与 forvalues 相同的行中;
    2. 任何东西都不能跟随开括号;要执行的第一个命令必须出现在新的一行上;
    3. 闭开大括号必须单独出现在一行。

    Remarks and examples

    forvalues 是为 lname 的不同数值执行代码块的最快方法。

    Example 1

    使用 forvalues lname = #1(#d)#2 , 循环执行零次或多次,第一次 执行for lname =#1 , 接着一次执行 for lname = #1 + #d , 再接着一次执行 for lname = #1 + #d + #d ,等等, 只要 lname ≤ #2 假设#d是正数) 或者 只要 lname ≥ #2 (假设#d是负数)。另外,将#d指定为0是错误。

    forvalues i = 1(1)5 {
    display ‘i’
    }
    
    image.png

    列出数字1-5,步长为1

    forvalues i = 10(-2)1 {
     display ‘i’
     }
    
    image.png

    列出从10开始的数字,逐步减少2直到达到2。它停在2而不是1或0。

    forvalues i = 1(1)1 {
    display ‘i’
    }
    

    结果显示1

    forvalues i = 1(1)0 {
    display ‘i’
    }
    

    没有显示任何值。
    forvalues lname = #1/#2 使用结果与 forvalues lname = #1(1)#2 相同. 使用 / 不允许向后计数,也就是步长不为负。

    Example 2

    forvalues i = 1/3 {
    display ‘i’
    }
    
    image.png

    列出了从1到3的三个值,但是

    forvalues i = 3/1 {
    2. display ‘i’
    3. }
    

    没有列出其它内容,是因为使用这种形式的 forvalues 命令只允许步长递增1。 forvalues lname = #1 #t to #2forvalues lname = #1 #t : #2 形式等同于使用 forvalues lname =#1(#d)#2, 此时#d = #t − #1,也就是说前面两者形式的步长都是 #t − #1

    Example 3

    forvalues i = 5 10 : 25 {
    display ‘i’
    }
    
    image.png
    forvalues i = 25 20 to 5 {
    display ‘i’
    }
    
    image.png

    Technical note

    下面输入语法是错误的。

    scalar x = 3
    forvalues i = 1(1)‘x’ {
    local x = ‘x’ + 1
    display ‘i’
     }
    

    forvalues 需要循环字符串和数字时。 允许使用宏,如以下技术说明所示。

    Technical note

    循环 range 的值是第一次执行循环时确定的。更改循环range 将不起作用。 例如

    local n 3
    forvalues i = 1(1)`n' {
     local n = `n' + 1
    display `i'
    }
    
    image.png
    不会创建无限循环。 当'n'最初等于3时,循环将执行3次。
    同样,修改循环计数器不会影响 forvalues 的后续行为。 例如
    forvalues i = 1(1)3 {
    display "Top of loop i = `i'"
    local i =`i'* 4
    display "After change i = `i'"
    }
    
    image.png

    仍将执行3次,在每次迭代开始时将 `i' 设置为1,2和3。

    相关文章

      网友评论

          本文标题:forvalues — 循环连续值

          本文链接:https://www.haomeiwen.com/subject/jpcinqtx.html