使用数学运算循环



我需要执行一系列已经定义的其他变量的替换值和函数。我试图写出我需要做的事情的逻辑。 var1将是"有条件的">

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 限定符重写代码,但使用 if/else 构造cond()更简单。对于此类操作,不应依赖默认的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 中循环的问题。

最新更新