循环数学运算
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 中需要循环的问题。
我需要对已定义的其他变量执行一系列替换值和函数。我试着写下我需要做的事情的逻辑。
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 中需要循环的问题。