如何在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排序:
- 生成组内序号:
bysort pid: gen seq = _n
该命令会为每个pid的观测从1开始依次编号,比如所有pid=1的观测会被标记为1、2、3……,pid=2和pid=3的观测同理。
- 按组内序号和pid排序:
sort seq pid
排序后,会先排列所有组内序号为1的pid1、pid2、pid3,接着是组内序号为2的pid1、pid2、pid3,以此类推,正好形成1、2、3循环的pid序列。
- (可选)删除临时变量:
如果不需要保留seq变量,执行以下命令删除:
drop seq
内容的提问来源于stack exchange,提问作者Foster Cossam
相关产品推荐
相关产品推荐

