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

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

我的数据集包含多个变量,称为 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 没有随着整个数据集的值变化而正确更新,但每次观察都应该不同。

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

解决方法

一个简洁的具体数据示例胜过长篇大论。您的描述似乎与这样的示例一致:

* Example generated by -dataex-. To install: ssc install dataex
clear
input str1 id float(avar_1 avar_2 avar_3 bvar_1 bvar_2)
"A" 1 . 6 8 10
"B" 2 4 . 9  .
"C" 3 5 7 . 11
end

* 4 is specific to this example. 
rename (bvar_*) (avar_#),renumber(4)

reshape long avar_,i(id) j(which)
(note: j = 1 2 3 4 5)

Data                               wide   ->   long
-----------------------------------------------------------------------------
Number of obs.                        3   ->      15
Number of variables                   6   ->       3
j variable (5 values)                     ->   which
xij variables:
               avar_1 avar_2 ... avar_5   ->   avar_
-----------------------------------------------------------------------------

drop if missing(avar_)
bysort id (which) : replace which = _n
list,sepby(id)

     +--------------------+
     | id   which   avar_ |
     |--------------------|
  1. |  A       1       1 |
  2. |  A       2       6 |
  3. |  A       3       8 |
  4. |  A       4      10 |
     |--------------------|
  5. |  B       1       2 |
  6. |  B       2       4 |
  7. |  B       3       9 |
     |--------------------|
  8. |  C       1       3 |
  9. |  C       2       5 |
 10. |  C       3       7 |
 11. |  C       4      11 |
     +--------------------+

优点:

您的数据布局需要由 rename 尤其是 reshape long 给出的某种结构。我不会在此处提供 reshape wide 的代码,因为对于绝大多数 Stata 用途,您最好使用这种布局。

缺点:

!mi(var`x')

返回变量的第一个值是否不丢失。如果 foo 是数据集中的变量,则 !mi(foo) 被评估为 !mi(foo[1])。这不是你想要的。有关完整故事,请参阅 https://www.stata.com/support/faqs/programming/if-command-versus-if-qualifier/

我建议使用更具吸引力的变量名称。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-