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