如何将变量的非连续值替换为连续序列值?
解决Stata中非连续变量转为连续递增序列的问题
你的原代码逻辑存在明显问题:levelsof获取的是district的唯一值列表,但循环内的replace语句使用_n(当前观测行号)进行模运算,会把所有观测的district修改为基于行号的重复序列,完全没有关联原变量的实际取值,自然无法得到预期的连续递增序列。
以下是两种高效的正确实现方法:
方法一:使用egen group()(推荐)
这是最简洁直接的方式,egen的group()函数会自动识别变量的唯一值,并按升序为每个唯一值分配连续的整数(从1开始):
egen district = group(district)
如果不想覆盖原变量,可以生成新变量:
egen district_new = group(district)
该命令会自动对应你的需求:原非连续值1→1、2→2、3→3、5→4、10→5……以此类推生成连续递增序列。
方法二:排序后生成连续值
如果需要手动控制生成逻辑,可以先按district排序,再通过分组累加生成连续值:
sort district by district: gen temp = 1 if _n == 1 gen district_new = sum(temp) drop temp
此方法通过标记每个唯一district的第一个观测,再对标记值累加得到连续序列,效果与方法一一致。
内容的提问来源于stack exchange,提问作者Kirti Chauhan
相关产品推荐
相关产品推荐

