loops - 跨列添加第一个非缺失观察
问题描述
我目前有许多模型的偏差,如下面的数据所示:
year model_2015 model_2016 model_2017
2016 15 . .
2017 20 10 .
2018 30 20 30
变量Model_2015
, 执行2015
, 有偏差2016
, 2017
, 2018
; 和 的变量Model_2016
,以此类推。2017
2018
我想创建一个变量来总结每个人的第一次观察。
所以对于这个例子:
first = 15 + 10 + 30 = 55
我假设我必须做一个循环,但我很难过如何去做。
编辑:
理想情况下,我还想要一个添加第二个、第三个等非缺失观察的解决方案。
解决方案
以下对我有用:
generate first = model_2015[1] + model_2016[2] + model_2017[3]
但是,这是一种更通用的方法:
clear
input year model_2015 model_2016 model_2017
2016 15 . .
2017 20 10 .
2018 30 20 30
end
generate id = 1
tempfile myfile
save `myfile'
collapse (firstnm) model*, by(id)
egen first = rowtotal(model*)
keep id first
merge 1:m id using `myfile'
drop id _merge
order year model* first
list, abbreviate(15)
+-----------------------------------------------------+
| year model_2015 model_2016 model_2017 first |
|-----------------------------------------------------|
1. | 2016 15 . . 55 |
2. | 2017 20 10 . 55 |
3. | 2018 30 20 30 55 |
+-----------------------------------------------------+
编辑:
下面,是一个更通用的解决方案:
clear
input year model_2015 model_2016 model_2017
2016 15 . .
2017 20 10 .
2018 30 20 30
2019 40 10 10
end
local i = 0
foreach v of varlist model* {
local ++i
local vals
forvalues j = 1 / `=_N' {
if !missing(`v'[`j']) local vals `vals' `=`v'[`j']'
}
local ind_`i' `: word 1 of `vals'' // CHANGE THIS NUMBER
local ind_all `ind_all' `ind_`i''
}
generate first = `= subinstr("`ind_all'", " ", "+", `= wordcount("`ind_all'") - 1')'
结果:
list, abbreviate(15)
+-----------------------------------------------------+
| year model_2015 model_2016 model_2017 first |
|-----------------------------------------------------|
1. | 2016 15 . . 55 |
2. | 2017 20 10 . 55 |
3. | 2018 30 20 30 55 |
4. | 2019 40 10 10 55 |
+-----------------------------------------------------+
+-----------------------------------------------------+
| year model_2015 model_2016 model_2017 second |
|-----------------------------------------------------|
1. | 2016 15 . . 50 |
2. | 2017 20 10 . 50 |
3. | 2018 30 20 30 50 |
4. | 2019 40 10 10 50 |
+-----------------------------------------------------+
+-----------------------------------------------------+
| year model_2015 model_2016 model_2017 third |
|-----------------------------------------------------|
1. | 2016 15 . . 40 |
2. | 2017 20 10 . 40 |
3. | 2018 30 20 30 40 |
4. | 2019 40 10 10 40 |
+-----------------------------------------------------+
请注意,在这种情况下,为了更好地说明,我使用了一个稍作修改的示例。
推荐阅读
- github - 如何设置 Raspberry Pi 3 B+ 以自动将更新部署到私有 Github 存储库?
- c# - DependencyProperty 更改时重新计算缓存公共属性?
- java - 使用 Rectangle.Intersects 进行碰撞检测会导致对象“粘”在表面上 (Java)
- python - 按升序合并 3 个列表
- javascript - 在 javascript 中创建的表格无法正确显示数据表
- numpy - 用于分类的 2D 数据点的优度度量
- spring - 当我删除弹簧批处理数据时:在封闭的结果集中不允许操作
- javascript - Contenteditable div - 按钮点击事件与其他元素点击事件有何不同?
- java - 如何从相邻文本中获取文本颜色
- java - 如果使用 InputStream 来自 PIPE 的输入结束,如何使(Java)程序自动结束