查找与长格式记录子集的最大值关联的字符串值
Finding string value associated with max value of record subset in long format
对于使用长格式数据的非纵向分析,当受试者有多次访问或记录时,我通常会使用 bysort ID
在每个受试者中寻找一条记录,并设置一个临时变量来保存整数或我找到的实际值,然后 egen max()
找到找到的所有记录的最大值,然后在记录 _n==1 for that subject
中设置最终值。这样我就可以将不同访问的值渗透到每个主题的单个记录中。每个受试者的每条记录将在分析过程中使用(但不是纵向的,可能是横截面的或回归的,ANOVA 等)
假设我想要试验第 3 年的最高胆固醇 (ldl
) 值,其中 ldl
是所有受试者每季度(每 3 个月)测量一次,这是可以实现的使用以下代码:
cap drop ldl3tmp
cap drop ldl3max
cap drop ldl3
bysort id (visitdate): gen ldl3tmp = ldl if trialyear==3
bysort id (visitdate): egen ldl3max = max(ldl3tmp)
bysort id (visitdate): gen ldl3 = ldl3max if _n==1
假设有抽血的实验室技术员或抽血师的姓名缩写。我如何渗透一个字符串值来记录 _n==1,它与试验第 3 年的记录子集中的最大 ldl
值相关联?字符串值无法排序,所以我猜答案可能是消除 ldl
不是第 3 年最大值的记录,然后字符串将在该记录中?
在这种情况下,我如何找出_n 的最大值?如果我知道,我可以使用
bysort id (visitdate): drop if _n!=6 //if _n==6 has the max value of ldl
以下是如何在试验的第 3 年的 4 个季度 ldl
值中找到与最大 ldl
值关联的记录编号。结果是一个名为 recmax
的变量,只会为找到最大值的特定记录(在每个受试者的所有记录中)填写该变量。
cap drop tmpldl3
cap drop maxldl3
cap drop recmax
cap drop visitdate
gen long visitdate = date(dateofvisit, "MDY") //You have to convert date ("MM/DD/YYYY") to a long integer format - based on #days since Jan 1, 1960
bysort id (visitdate): gen tmpldl3 = ldl if trialyear ==3
bysort id (visitdate): egen maxldl3 = max(tmpldl3)
bysort id (visitdate): gen recmax = _n if tmpldl3==maxldl3 & tmpldl3!=. & maxldl3!=.
然后,您可以通过在任何分析命令的尾部 if 语句中指定 if recmax!=.
来横截面分析该记录中的所有其他数据(例如字符串数据)(方差分析、相关性、回归)。如果您小心的话,您还可以使用命令 drop if recmax!=.
drop
所有其他不感兴趣的具有无关 ldl
值的记录,前提是您意识到丢失了数据,如果您保存,请保存到包含“_reduced”或“_dropped”的文件名。
对于使用长格式数据的非纵向分析,当受试者有多次访问或记录时,我通常会使用 bysort ID
在每个受试者中寻找一条记录,并设置一个临时变量来保存整数或我找到的实际值,然后 egen max()
找到找到的所有记录的最大值,然后在记录 _n==1 for that subject
中设置最终值。这样我就可以将不同访问的值渗透到每个主题的单个记录中。每个受试者的每条记录将在分析过程中使用(但不是纵向的,可能是横截面的或回归的,ANOVA 等)
假设我想要试验第 3 年的最高胆固醇 (ldl
) 值,其中 ldl
是所有受试者每季度(每 3 个月)测量一次,这是可以实现的使用以下代码:
cap drop ldl3tmp
cap drop ldl3max
cap drop ldl3
bysort id (visitdate): gen ldl3tmp = ldl if trialyear==3
bysort id (visitdate): egen ldl3max = max(ldl3tmp)
bysort id (visitdate): gen ldl3 = ldl3max if _n==1
假设有抽血的实验室技术员或抽血师的姓名缩写。我如何渗透一个字符串值来记录 _n==1,它与试验第 3 年的记录子集中的最大 ldl
值相关联?字符串值无法排序,所以我猜答案可能是消除 ldl
不是第 3 年最大值的记录,然后字符串将在该记录中?
在这种情况下,我如何找出_n 的最大值?如果我知道,我可以使用
bysort id (visitdate): drop if _n!=6 //if _n==6 has the max value of ldl
以下是如何在试验的第 3 年的 4 个季度 ldl
值中找到与最大 ldl
值关联的记录编号。结果是一个名为 recmax
的变量,只会为找到最大值的特定记录(在每个受试者的所有记录中)填写该变量。
cap drop tmpldl3
cap drop maxldl3
cap drop recmax
cap drop visitdate
gen long visitdate = date(dateofvisit, "MDY") //You have to convert date ("MM/DD/YYYY") to a long integer format - based on #days since Jan 1, 1960
bysort id (visitdate): gen tmpldl3 = ldl if trialyear ==3
bysort id (visitdate): egen maxldl3 = max(tmpldl3)
bysort id (visitdate): gen recmax = _n if tmpldl3==maxldl3 & tmpldl3!=. & maxldl3!=.
然后,您可以通过在任何分析命令的尾部 if 语句中指定 if recmax!=.
来横截面分析该记录中的所有其他数据(例如字符串数据)(方差分析、相关性、回归)。如果您小心的话,您还可以使用命令 drop if recmax!=.
drop
所有其他不感兴趣的具有无关 ldl
值的记录,前提是您意识到丢失了数据,如果您保存,请保存到包含“_reduced”或“_dropped”的文件名。