我拥有3000多个共同基金的历史回报。
这些基金中有很多的返回历史记录都从0开始。但是,并非所有人都这样做。
如果历史返回序列以0开头,则该0需要删除/替换为空格。
我的数据看起来像这样
1),,,,,,,,,,,,,,,, 0,5,2,7,43,7,9,23,7,9
2)、、、、、、、、、、、、、、、、、、、、、、、、 6、3、21、5、3、2、6、2、4,
3)、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 0、9
4),,,,,,,,,,,,,,,,,,,,,,,,, 0,2,8,9,3,4,6,1,3,3
5),,,,,,,,,,, 7,0,4,2,4,6,7,4,2,5,7,7
逗号分隔不同的单元格。因此,对于第1),3)和4)行,我需要删除开始返回序列的0。2)和6)需要保持原状。
我怎样才能做到这一点?我宁愿使用Excel中的解决方案,但是如果需要的话,我可以使用Stata。
这是在Stata中执行此操作的两种方法。
clear
input byte(v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28)
. . . . . . . . . . . . . . 0 5 2 7 43 7 9 23 7 9 . . . .
. . . . . . . . . . . . . . . . . . . 6 3 21 5 3 2 6 2 4
. . . . . . . 0 9 2 4 7 2 4 56 7 3 5 4 1 . . . . . . . .
. . . . . . . . . . . . . . . . . 0 2 8 9 3 4 6 1 3 3 .
. . . . . . . . . . . 7 0 4 2 4 6 7 4 2 5 7 7 . . . . .
end
tempfile f
save "`f'"
list v1-v21, noobs compress
* The looping method
gen nomis = 0
qui foreach v of varlist v* {
replace nomis = nomis + 1 if !mi(`v')
replace `v' = . if `v' == 0 & nomis == 1
count if nomis == 0
if r(N) == 0 continue, break
}
list v1-v21, noobs compress
* this is easier to do with data in long form
use "`f'", clear
gen id = _n
reshape long v, i(id) j(n)
bysort id (n): gen nomis = sum(!mi(v)) // this is a running sum!
replace v = . if v == 0 & nomis == 1
drop nomis
reshape wide v, i(id) j(n)
list v1-v21, noobs compress
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句