现在我的数据看起来像这样。我想要做的是用logrd [_n + 1] -avgrdgr [_n + 1]填写logrd中的缺失值。
age avgrdgr logrd
-37 0.1 .
...
-3 -0.2 .
-2 -0.1 .
-1 0.3 .
0 0.4 .
1 0.1 .
2 0.6 .
3 0.5 1
所以结果应该是这样......
age avgrdgr logrd
-37 0.1 0.3
...
-3 -0.2 -0.8
-2 -0.1 -0.9
-1 0.3 -0.6
0 0.4 -0.2
1 0.1 -0.1
2 0.6 0.5
3 0.5 1
我尝试通过创建这样的代码来循环它。
foreach x of logrd & y of avgrdgr{
if missing(`x'){
bys cus: replace `x' = `x'[_n+1] - `y'[_n+1]
}
}
这是我第一次亲自尝试创建一个循环而且我被卡住了...请帮助我。
答案 0 :(得分:1)
你不需要循环。但是,由于Stata通过您的数据从第一次观察到最后一次观察,您需要暂时反转您的数据,以便后面的观察结果出现在您想要填写的早期观察之前。这里有一些代码是什么喜欢你可以使用的东西。
* Example generated by -dataex-. To install: ssc install dataex
clear
input byte age float avgrdgr float logrd
-3 -.2 .
-2 -.1 .
-1 .3 .
0 .4 .
1 .1 .
2 .6 .
3 .5 1
end
gsort -age
replace logrd = logrd[_n-1]-avgrdgr[_n-1] if missing(logrd)
sort age
结果是
. list, clean
age avgrdgr logrd
1. -3 -.2 -.8
2. -2 -.1 -.9
3. -1 .3 -.6
4. 0 .4 -.2
5. 1 .1 -.1
6. 2 .6 .5
7. 3 .5 1
答案 1 :(得分:0)
以下数据(包括示例代码中使用但未显示在示例数据中的明显标识符)可能更像您的数据。
* Example generated by -dataex-. To install: ssc install dataex
clear
input byte(cus age) float(avgrdgr logrd)
1 -3 -.2 .
1 -2 -.1 .
1 -1 .3 .
1 0 .4 .
1 1 .1 .
1 2 .6 .
1 3 .5 1
2 -3 -.2 .
2 -2 -.1 .
2 -1 .3 .
2 0 .4 .
2 1 .1 .
2 2 .6 .
2 3 .5 0
end
generate negage = -age
bysort cus (negage): replace logrd = logrd[_n-1]-avgrdgr[_n-1] if missing(logrd)
drop negage
sort cus age
结果是
. list, sepby(cus)
+-----------------------------+
| cus age avgrdgr logrd |
|-----------------------------|
1. | 1 -3 -.2 -.8 |
2. | 1 -2 -.1 -.9 |
3. | 1 -1 .3 -.6 |
4. | 1 0 .4 -.2 |
5. | 1 1 .1 -.1 |
6. | 1 2 .6 .5 |
7. | 1 3 .5 1 |
|-----------------------------|
8. | 2 -3 -.2 -1.8 |
9. | 2 -2 -.1 -1.9 |
10. | 2 -1 .3 -1.6 |
11. | 2 0 .4 -1.2 |
12. | 2 1 .1 -1.1 |
13. | 2 2 .6 -.5 |
14. | 2 3 .5 0 |
+-----------------------------+
答案 2 :(得分:0)
距离合法[Activity(
Label = "Sample",
Icon = "@drawable/icon",
Theme = "@style/MyTheme",
MainLauncher = true,
WindowSoftInputMode = SoftInput.AdjustResize,
ScreenOrientation = ScreenOrientation.Portrait,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity....
{
...
}
语法还有很长的路要走。这很简单但至关重要的是要注意禁止foreach
语法图中不允许的任何内容。
此外,请注意foreach
语句并不像您期望的那样有效。每次循环循环都没有不同的评估结果。 if
仅作为命令意味着if missing(whatever)
。
除非你的例子简化了密钥细节,否则只有一个循环,所以这应该足够了。
if missing(whatever[1])
我玩弄了扭转顺序,就像@William Lisowski的回答一样,但这个也有效。