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

使用Stata统计受试者两年间同一地点的留存次数

解决Stata中统计受试者两年间同一地点停留次数的问题

首先咱们先明确你的数据集(用Markdown表格展示更清晰):

IDS1S2S3year
1121999
1122000
211999
212000
311999
322000
41231999
43122000
5121999
5132000

要统计每个受试者在1999和2000年停留于同一地点的次数,核心是对比每个ID对应S1/S2/S3在两年的数值是否一致,且只统计两年都有有效记录的地点。下面是具体的Stata操作步骤:

步骤1:将数据转换为宽格式

首先把长格式数据转成宽格式,这样每个ID单独一行,方便直接对比两年的地点数据:

* 按ID分组,将year作为后缀生成宽格式变量
reshape wide S1 S2 S3, i(ID) j(year)

执行后,数据会新增S1_1999、S1_2000、S2_1999、S2_2000、S3_1999、S3_2000这些变量,每个ID对应一行。

步骤2:生成地点匹配标记

对每个地点(S1/S2/S3),判断两年的数值是否相同,同时排除至少一年无记录的情况:

* 标记每个地点是否两年数值一致(仅当两年都有非缺失值时判断)
gen match_S1 = (S1_1999 == S1_2000) if !missing(S1_1999) & !missing(S1_2000)
gen match_S2 = (S2_1999 == S2_2000) if !missing(S2_1999) & !missing(S2_2000)
gen match_S3 = (S3_1999 == S3_2000) if !missing(S3_1999) & !missing(S3_2000)

* 将缺失的匹配标记替换为0(代表该地点因缺失数据不计入统计)
replace match_S1 = 0 if missing(match_S1)
replace match_S2 = 0 if missing(match_S2)
replace match_S3 = 0 if missing(match_S3)

步骤3:计算同一地点总次数

把每个ID的匹配标记求和,得到最终的统计结果:

* 求和得到每个ID的同一地点停留次数
gen same_location_count = match_S1 + match_S2 + match_S3

查看结果

执行下面的命令就能看到每个ID的统计结果:

list ID same_location_count, clean

验证结果

按照你的示例:

  • ID1:S1、S2两年都相同,S3两年都缺失 → 计数为2
  • ID2:只有S1两年相同,其他地点缺失 → 计数为1
  • ID3:S1两年不同,其他地点缺失 → 计数为0
  • ID4:三个地点两年数值都不同 → 计数为0
  • ID5:S1相同,S2不同,S3缺失 → 计数为1

完全符合你的预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:10:33