如何在Stata中重塑/转置病例与对照ID数据?
Stata数据重塑:将病例-对照宽格式转长格式
你当前的问题是宽格式的病例-对照数据无法直接用reshape long处理,因为CaseA没有和ControlB*一致的后缀结构。以下是两种可行的解决方案:
方案一:使用stack命令(更简洁)
stack命令可直接将多列堆叠为一列,同时保留分组变量(这里是IndexDate):
* 假设原始数据已加载 stack CaseA ControlB1-ControlB4, into(IDs) by(IndexDate) clear gen Case_control = (_stack == 1) // 标记病例为1,对照为0 drop _stack // 移除stack生成的临时变量 sort IndexDate Case_control descending // 按索引日期排序,病例排在前面
方案二:分步骤处理(更直观)
如果对stack命令不熟悉,可分两步分别处理病例和对照,再合并数据:
* 第一步:提取病例数据 preserve keep CaseA IndexDate rename CaseA IDs gen Case_control = 1 tempfile case_data save `case_data' restore * 第二步:提取并重塑对照数据 drop CaseA reshape long ControlB, i(IndexDate) j(control_id) rename ControlB IDs gen Case_control = 0 drop control_id * 第三步:合并病例和对照数据 append using `case_data' sort IndexDate Case_control descending
处理后结果示例
最终数据会匹配你想要的目标格式:
| IDs | IndexDate | Case_control |
|---|---|---|
| ID_x | 1/1/01 | 1 |
| ID_1 | 1/1/01 | 0 |
| ID_2 | 1/1/01 | 0 |
| ID_3 | 1/1/01 | 0 |
| ID_4 | 1/1/01 | 0 |
| ID_y | 1/2/01 | 1 |
| ... | ... | ... |
内容的提问来源于stack exchange,提问作者Emma
相关产品推荐
相关产品推荐

