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

如何在Stata中对含重复值的pid变量按1-3循环排序?

实现Stata数据按pid循环1-3排序的解决方案

我正在开展一项消费者偏好研究,要求受访者基于colour、texture、price属性从3款pid标识的产品中选择其一。现需Stata命令将数据按pid以1-3的循环顺序排序,即排序后pid值按1、2、3、1、2、3……规律呈现。

部分测试数据

clear
input colour texture price pid
1 2 1900 1
2 1 1300 2
0 0 0 3
1 1 1700 1
2 2 1900 2
0 0 0 3
1 1 1500 1
2 2 1700 1
0 0 0 1
2 2 1300 1
1 1 1900 1
0 0 0 1
1 2 1900 1
2 1 1500 2
0 0 0 2
1 1 1300 2
2 2 1700 2
0 0 0 2
2 1 1700 2
1 2 1300 2
0 0 0 3
2 1 1500 3
1 2 1700 3
0 0 0 3
2 2 1500 3
1 1 1700 3
0 0 0 3
end

尝试过的无效命令

gen cycle = mod(pid-1,3)+1
egen group_var = seq(), block(3)
gen cycle = _n % 3

正确的Stata实现命令

要实现pid按1-3循环排序,核心是给每个pid组内的观测分配组内序号,再按序号+pid排序:

  1. 生成组内序号:
bysort pid: gen seq = _n

该命令会为每个pid的观测从1开始依次编号,比如所有pid=1的观测会被标记为1、2、3……,pid=2和pid=3的观测同理。

  1. 按组内序号和pid排序:
sort seq pid

排序后,会先排列所有组内序号为1的pid1、pid2、pid3,接着是组内序号为2的pid1、pid2、pid3,以此类推,正好形成1、2、3循环的pid序列。

  1. (可选)删除临时变量:
    如果不需要保留seq变量,执行以下命令删除:
drop seq

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:04:56