循环数学运算

loop with math operations

我需要对已定义的其他变量执行一系列替换值和函数。我试着写下我需要做的事情的逻辑。 var1 将是 "conditional"

if var1> = 1 & var1 <= 2 {
new_variable1 = var3 * 100000000 + var4.
new_variable2 = var5 * 1000}

else {
new_variable1 = var3 * 1000000 + 99 * 100 + var5 * 1000
new_variable2 = var3 * 1000000 + var5 * 10000 + var4
}

示例示例:

var1    var2    var3    var4    var5    
1101    1   10  3   20
1102    2   15  2   15
1103    1   12  2   15
1103    2   20  3   12
1102    3   10  1   10
1104    2   15  1   10
clear 
input var1    var2    var3    var4    var5    
1101    1   10  3   20
1102    2   15  2   15
1103    1   12  2   15
1103    2   20  3   12
1102    3   10  1   10
1104    2   15  1   10
end 

gen long new1 = cond(inrange(var2, 1, 2), var3 * 1e8 + var4, var3 * 1e6 + 9900 + var5 * 1000) 
gen long new2 = cond(inrange(var2, 1, 2), var5 * 1000, var3 * 1e6 + var5 * 10000 + var4) 

     +----------------------------------------------------------+
     | var1   var2   var3   var4   var5         new1       new2 |
     |----------------------------------------------------------|
  1. | 1101      1     10      3     20   1000000003      20000 |
  2. | 1102      2     15      2     15   1500000002      15000 |
  3. | 1103      1     12      2     15   1200000002      15000 |
  4. | 1103      2     20      3     12   2000000003      12000 |
  5. | 1102      3     10      1     10     10019900   10100001 |
  6. | 1104      2     15      1     10   1500000001      10000 |
     +----------------------------------------------------------+

感谢您提供示例。 var1 的值都落在区间 [1, 2] 之外,所以我根据 var2 重写了示例。

最重要的细节是 if 命令在这里是完全错误的,因为它并不意味着观察循环。您可以使用 if 限定符重写代码,但使用 cond() 更简单,它是一个 if/else 结构。对于这样的操作,您不应该依赖默认的 float 存储类型。

阅读清单:

help cond()

help inrange() 

https://www.stata.com/support/faqs/programming/if-command-versus-if-qualifier/

https://www.stata-journal.com/sjpdf.html?articlenum=pr0016

https://www.stata-journal.com/sjpdf.html?articlenum=dm0026

请注意,这不是 Stata 中需要循环的问题。