逐行捕获非缺失值并将其存储在新变量中

问题描述

我的数据集包含多个变量,称为 avar_1bvar_10,指的是个人的历史。由于某些原因,历史并不总是完整的,并且存在一些“空白”(例如,avar_1avar_4 没有缺失,但 avar_2avar_3 缺失) .对于每个人,我想将第一个非缺失值存储在一个名为 var1 的新变量中,第二个非缺失值存储在 var2 等中,以便我拥有没有缺失值的历史记录。

我已经尝试了以下代码

local x=1
foreach wave in a b {
    forval i=1/10 {
        capture drop var`x' 
        generate var`x'=.
        capture replace var`x'=`wave'var`i' if !mi(`wave'`var'`i')
        if (!mi(var`x')) {
            local x=1+`x'
            }
    }
}

var1 已正确生成,但 var2 仅包含缺失值且未生成以下变量。但是,我 set trace on 并看到 var2 实际上被替换为从 avar_1bvar_10 的所有变量。

我的猜测是 local x 没有随着整个数据集的值变化而正确更新,但每次观察都应该不同。

这是问题吗?如果是,我该如何避免?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)