You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

长格式数据中提取记录子集最大值对应字符串取值的Stata操作方法

Stata长格式数据提取最大值对应字符串字段的方案

针对需要提取受试者试验第3年最高LDL值对应的采血师字符串、汇总到每个受试者第一条记录的需求,不需要硬删除记录或固定定位_n编号,用分组匹配逻辑即可实现,具体方案如下:


核心实现代码

假设采血师姓名字符串变量名为phlebotomist,可替换为实际的变量名:

* 清除冲突的旧变量
cap drop ldl3tmp
cap drop ldl3max
cap drop ldl3
cap drop phlebotomist_ldl3
cap drop is_ldl3_max

* 原有逻辑:计算每个受试者第3年的最高LDL值
bysort id (visitdate): gen ldl3tmp = ldl if trialyear == 3
bysort id (visitdate): egen ldl3max = max(ldl3tmp) 

* 新增逻辑:提取最高LDL对应的采血师信息
* 1. 先给每个受试者第3年LDL为最大值的行打标记
bysort id (visitdate): gen is_ldl3_max = (ldl3tmp == ldl3max) & !missing(ldl3tmp)
* 2. 将标记行的采血师值同步到该受试者所有行,仅保留第一条记录的有效值
bysort id (visitdate): gen phlebotomist_ldl3 = phlebotomist if is_ldl3_max == 1
bysort id (visitdate): replace phlebotomist_ldl3 = phlebotomist_ldl3[_n+1] if missing(phlebotomist_ldl3)
bysort id (visitdate): replace phlebotomist_ldl3 = "" if _n != 1

* 原有逻辑:保留第一条记录的最高LDL值
bysort id (visitdate): gen ldl3 = ldl3max if _n == 1

补充说明

  • 如果同一个受试者第3年有多条记录LDL同为最高值,上述代码会默认取visitdate排序靠前的记录对应的采血师,若需要取排序靠后的,把排序规则里的visitdate改成-visitdate即可
  • 你提到的定位最大值对应_n编号的需求,直接用上述生成的is_ldl3_max标记变量即可定位,is_ldl3_max == 1的行就是最大值所在行,不需要写死_n == 6这类固定值,避免不同受试者最大值所在行不一致导致的错误
  • 你猜测的删除非最大值记录的方法也可实现,但会丢失原始的访视数据,仅建议在已经备份原始长表的情况下使用

内容的提问来源于stack exchange,提问作者user15535192

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 22:24:03