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

如何在Stata中仅随机化部分观测值并保持ID分组?

Stata实现仅随机Type=F观测且保留ID分组的方法

这里提供两种可行的实现方式,核心思路是仅在同一ID分组内对Type=F的观测进行随机排序,同时保留Type=V观测的原有顺序及ID分组结构:

方法一:单步生成随机键排序(简洁版)

* 确保数据按ID分组、Type先V后F排序
sort ID Type

* 为每个ID内的Type=F观测生成随机数
bysort ID Type: gen rand = runiform() if Type == "F"

* 重新排序:ID分组保持不变,Type=V观测顺序不变,Type=F观测在组内随机排列
sort ID Type rand

* 清理临时变量
drop rand

逻辑说明

  • bysort ID Type 限定了随机数仅在同一ID、同一Type的组内生成,Type=V的观测不会被分配随机数;
  • 排序时,Type=V的观测因无随机数(值为缺失),会保持sort ID Type后的原有顺序;Type=F的观测则按随机数大小重新排列,实现组内随机化;
  • 最终数据仍保持ID分组,且Type=V始终排在Type=F之前。

方法二:拆分-处理-合并(直观版)

如果需要更清晰地分离两类观测的处理流程,可以拆分数据集后单独处理Type=F组:

* 保存Type=V的观测
preserve
keep if Type == "V"
save "temp_v.dta", replace
restore

* 处理Type=F的观测:按ID分组随机排序
preserve
keep if Type == "F"
bysort ID: gen rand = runiform()
sort ID rand
drop rand
save "temp_f.dta", replace
restore

* 合并回完整数据集,保持ID分组和Type顺序
use "temp_v.dta", clear
append using "temp_f.dta"
sort ID Type

逻辑说明

  • 先将Type=V的观测单独保存,确保其顺序完全不变;
  • 对Type=F的观测,在每个ID分组内生成随机数并排序,实现组内随机化;
  • 合并后重新按ID和Type排序,保证最终数据的结构符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:57:59