温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
作者:胡雨霄 (伦敦政治经济学院)
目录
假设要处理的数据包含 3 个代码变量,household_ID, city_ID, 以及 state_ID。这 3 个变量分别表示不同个体所在的家庭、城市以及州的代码。若将这 3 个代码变量视为一个组合,那么组合内不同的数字排列,则分别代表了不同的个体。
本推文将介绍如何在这种情况下,生成不同个体的唯一代码 (unique ID)。
首先设置 25,000 个观测值。
clear
set obs 25000
假设变量 household_ID 的取值范围为 [1, 50],变量 city_ID 的取值范围为 [1, 20],变量 state_ID 的取值范围为 [1, 50]。
*随机生成
gen household_ID = ceil(runiform()*50)
gen city_ID = ceil(runiform()*20)
gen state_ID = ceil(runiform()*50)
此外,生成变量 x1
x2
,模拟在实际数据中我们感兴趣的变量 (variables of interest)。
*随机生成
gen x1 = rnormal()
gen x2 = rnormal()
数据结构如下所示:
. list household_ID city_ID state_ID x1 x2 in 1/10
+-------------------------------------------------------+
| househ~D city_ID state_ID x1 x2 |
|-------------------------------------------------------|
1. | 18 10 28 2.025588 -.1922264 |
2. | 14 11 8 1.042631 -.0807038 |
3. | 7 17 21 .2977124 .6150526 |
4. | 2 4 28 -1.722132 -1.358765 |
5. | 44 8 36 -.7291995 .0929139 |
|-------------------------------------------------------|
6. | 18 12 18 .8618261 .6687715 |
7. | 4 4 29 -.239354 .6361541 |
8. | 17 14 2 .516549 -.6399707 |
9. | 28 15 19 -1.812016 -1.628398 |
10. | 44 2 23 -1.015124 -.7855705 |
+-------------------------------------------------------+
创建 Unique ID 最简单的方法就是使用 egen
命令。
. egen ID = group(household_ID city_ID state_ID)
. list in 1/10
+---------------------------------------+
| househ~D state_ID city_ID ID |
|---------------------------------------|
1. | 18 28 10 6890 |
2. | 14 8 11 5296 |
3. | 7 21 17 2724 |
4. | 2 28 4 469 |
5. | 44 36 8 17091 |
|---------------------------------------|
6. | 18 18 12 6925 |
7. | 4 29 4 1253 |
8. | 17 2 14 6553 |
9. | 28 19 15 10945 |
10. | 44 23 2 16966 |
+---------------------------------------+
通过 egen
命令创建的 Unique ID 变量 ID 的排序方式与 sort household_ID city_ID state_ID
命令的排序方式相同,如下所示:
. sort household_ID city_ID state_ID \\排序
. list household_ID city_ID state_ID ID in 1/10
+------------------------------------+
| househ~D city_ID state_ID ID |
|------------------------------------|
1. | 1 1 2 1 |
2. | 1 1 5 2 |
3. | 1 1 7 3 |
4. | 1 1 10 4 |
5. | 1 1 10 4 |
|------------------------------------|
6. | 1 1 11 5 |
7. | 1 1 15 6 |
8. | 1 1 15 6 |
9. | 1 1 20 7 |
10. | 1 1 21 8 |
+------------------------------------+
另一种创建 Unique ID 变量的方式是创建一个字符 (string) 变量。虽然这种方式相对复杂,但所产生的 Unique ID 变量也更直接,容易识别。
具体命令如下:
. gen ID3 = "H" + string(household_ID,"%2.0f" ) + "C" + string(city_ID) + "S" + string(state_ID)
. list household_ID city_ID state_ID ID3 in 1/10
+-------------------------------------------+
| househ~D city_ID state_ID ID3 |
|-------------------------------------------|
1. | 18 10 28 H18C10S28 |
2. | 14 11 8 H14C11S8 |
3. | 7 17 21 H7C17S21 |
4. | 2 4 28 H2C4S28 |
5. | 44 8 36 H44C8S36 |
|-------------------------------------------|
6. | 18 12 18 H18C12S18 |
7. | 4 4 29 H4C4S29 |
8. | 17 14 2 H17C14S2 |
9. | 28 15 19 H28C15S19 |
10. | 44 2 23 H44C2S23 |
+-------------------------------------------+
由于数据中存在重复观测值,创建的唯一代码 (Unique ID) 其实也并不唯一。
当运行 sum ID
命令后,可以发现变量 ID 的最大取值为 19,757。这说明该样本一共包括 19,757 个不同的个体。duplicates report ID
的结果表明,在该数据集中,有 4,459 (19,757 - 15,298 = 4,459)个个体被重复观测了。在实证研究中,出现这一结果的原因可能是,不同变量的数据来源不同,从而导致有些个体被重复观测。
. sum ID
Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
ID | 25,000 9890.821 5709.989 1 19757
. duplicates report ID
Duplicates in terms of ID
--------------------------------------
copies | observations surplus
----------+---------------------------
1 | 15298 0
2 | 7528 3764
3 | 1836 1224
4 | 312 234
5 | 20 16
6 | 6 5
--------------------------------------
此时,应当确定一个处理 x1
和 x2
的规则以确保每一个唯一代码 (Unique ID) 都唯一对应一个观测值。处理 x1
和 x2
的命令如下。
collapse (mean) mean_x1=x1 mean_x2=x2 (median) ///
med_x1=x1 med_x2=x2, by(ID)
对于重复观测值,该命令运行后会生成新变量,保留每个 ID 重复观测值的平均值以及中位数。数据结构如下
. list in 1/10
+----------------------------------------------------+
| ID mean_x1 mean_x2 med_x1 med_x2 |
|----------------------------------------------------|
1. | 1 .1792767 .7344462 .1792767 .7344462 |
2. | 2 1.093224 -.1823799 1.093224 -.1823799 |
3. | 3 -.3094974 2.653506 -.3094974 2.653506 |
4. | 4 .4993488 .8985389 .4993488 .8985389 |
5. | 5 -.7429997 -.0464208 -.7429997 -.0464208 |
|----------------------------------------------------|
6. | 6 .4437077 -.5161228 .4437077 -.5161228 |
7. | 7 -.7664803 1.15589 -.7664803 1.15589 |
8. | 8 .59837 .1051743 .59837 .1051743 |
9. | 9 .9568613 -.7659643 .9568613 -.7659643 |
10. | 10 -.8682789 -1.468759 -.8682789 -1.468759 |
+----------------------------------------------------+
此外,处理后,可以发现数据中已经不存在重复观测值了。
. duplicates report ID
Duplicates in terms of ID
--------------------------------------
copies | observations surplus
----------+---------------------------
1 | 19757 0
--------------------------------------
连享会计量方法专题……
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD
Source: Three Ways to Create Unique Identifiers (Francis, 2012)
2020寒假Stata现场班 (北京, 1月8-17日,连玉君-江艇主讲),「+助教招聘」
2020寒假Stata现场班
假设要处理的数据包含 3 个代码变量,household_ID, city_ID, 以及 state_ID。这 3 个变量分别表示不同个体所在的家庭、城市以及州的代码。若将这 3 个代码变量视为一个组合,那么组合内不同的数字排列,则分别代表了不同的个体。
本推文将介绍如何在这种情况下,生成不同个体的唯一代码 (unique ID)。
首先设置 25,000 个观测值。
clear
set obs 25000
假设变量 household_ID 的取值范围为 [1, 50],变量 city_ID 的取值范围为 [1, 20],变量 state_ID 的取值范围为 [1, 50]。
*随机生成
gen household_ID = ceil(runiform()*50)
gen city_ID = ceil(runiform()*20)
gen state_ID = ceil(runiform()*50)
此外,生成变量 x1
x2
,模拟在实际数据中我们感兴趣的变量 (variables of interest)。
*随机生成
gen x1 = rnormal()
gen x2 = rnormal()
数据结构如下所示:
. list household_ID city_ID state_ID x1 x2 in 1/10
+-------------------------------------------------------+
| househ~D city_ID state_ID x1 x2 |
|-------------------------------------------------------|
1. | 18 10 28 2.025588 -.1922264 |
2. | 14 11 8 1.042631 -.0807038 |
3. | 7 17 21 .2977124 .6150526 |
4. | 2 4 28 -1.722132 -1.358765 |
5. | 44 8 36 -.7291995 .0929139 |
|-------------------------------------------------------|
6. | 18 12 18 .8618261 .6687715 |
7. | 4 4 29 -.239354 .6361541 |
8. | 17 14 2 .516549 -.6399707 |
9. | 28 15 19 -1.812016 -1.628398 |
10. | 44 2 23 -1.015124 -.7855705 |
+-------------------------------------------------------+
创建 Unique ID 最简单的方法就是使用 egen
命令。
. egen ID = group(household_ID city_ID state_ID)
. list in 1/10
+---------------------------------------+
| househ~D state_ID city_ID ID |
|---------------------------------------|
1. | 18 28 10 6890 |
2. | 14 8 11 5296 |
3. | 7 21 17 2724 |
4. | 2 28 4 469 |
5. | 44 36 8 17091 |
|---------------------------------------|
6. | 18 18 12 6925 |
7. | 4 29 4 1253 |
8. | 17 2 14 6553 |
9. | 28 19 15 10945 |
10. | 44 23 2 16966 |
+---------------------------------------+
通过 egen
命令创建的 Unique ID 变量 ID 的排序方式与 sort household_ID city_ID state_ID
命令的排序方式相同,如下所示:
. sort household_ID city_ID state_ID \\排序
. list household_ID city_ID state_ID ID in 1/10
+------------------------------------+
| househ~D city_ID state_ID ID |
|------------------------------------|
1. | 1 1 2 1 |
2. | 1 1 5 2 |
3. | 1 1 7 3 |
4. | 1 1 10 4 |
5. | 1 1 10 4 |
|------------------------------------|
6. | 1 1 11 5 |
7. | 1 1 15 6 |
8. | 1 1 15 6 |
9. | 1 1 20 7 |
10. | 1 1 21 8 |
+------------------------------------+
另一种创建 Unique ID 变量的方式是创建一个字符 (string) 变量。虽然这种方式相对复杂,但所产生的 Unique ID 变量也更直接,容易识别。
具体命令如下:
. gen ID3 = "H" + string(household_ID,"%2.0f" ) + "C" + string(city_ID) + "S" + string(state_ID)
. list household_ID city_ID state_ID ID3 in 1/10
+-------------------------------------------+
| househ~D city_ID state_ID ID3 |
|-------------------------------------------|
1. | 18 10 28 H18C10S28 |
2. | 14 11 8 H14C11S8 |
3. | 7 17 21 H7C17S21 |
4. | 2 4 28 H2C4S28 |
5. | 44 8 36 H44C8S36 |
|-------------------------------------------|
6. | 18 12 18 H18C12S18 |
7. | 4 4 29 H4C4S29 |
8. | 17 14 2 H17C14S2 |
9. | 28 15 19 H28C15S19 |
10. | 44 2 23 H44C2S23 |
+-------------------------------------------+
由于数据中存在重复观测值,创建的唯一代码 (Unique ID) 其实也并不唯一。
当运行 sum ID
命令后,可以发现变量 ID 的最大取值为 19,757。这说明该样本一共包括 19,757 个不同的个体。duplicates report ID
的结果表明,在该数据集中,有 4,459 (19,757 - 15,298 = 4,459)个个体被重复观测了。在实证研究中,出现这一结果的原因可能是,不同变量的数据来源不同,从而导致有些个体被重复观测。
. sum ID
Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
ID | 25,000 9890.821 5709.989 1 19757
. duplicates report ID
Duplicates in terms of ID
--------------------------------------
copies | observations surplus
----------+---------------------------
1 | 15298 0
2 | 7528 3764
3 | 1836 1224
4 | 312 234
5 | 20 16
6 | 6 5
--------------------------------------
此时,应当确定一个处理 x1
和 x2
的规则以确保每一个唯一代码 (Unique ID) 都唯一对应一个观测值。处理 x1
和 x2
的命令如下。
collapse (mean) mean_x1=x1 mean_x2=x2 (median) ///
med_x1=x1 med_x2=x2, by(ID)
对于重复观测值,该命令运行后会生成新变量,保留每个 ID 重复观测值的平均值以及中位数。数据结构如下
. list in 1/10
+----------------------------------------------------+
| ID mean_x1 mean_x2 med_x1 med_x2 |
|----------------------------------------------------|
1. | 1 .1792767 .7344462 .1792767 .7344462 |
2. | 2 1.093224 -.1823799 1.093224 -.1823799 |
3. | 3 -.3094974 2.653506 -.3094974 2.653506 |
4. | 4 .4993488 .8985389 .4993488 .8985389 |
5. | 5 -.7429997 -.0464208 -.7429997 -.0464208 |
|----------------------------------------------------|
6. | 6 .4437077 -.5161228 .4437077 -.5161228 |
7. | 7 -.7664803 1.15589 -.7664803 1.15589 |
8. | 8 .59837 .1051743 .59837 .1051743 |
9. | 9 .9568613 -.7659643 .9568613 -.7659643 |
10. | 10 -.8682789 -1.468759 -.8682789 -1.468759 |
+----------------------------------------------------+
此外,处理后,可以发现数据中已经不存在重复观测值了。
. duplicates report ID
Duplicates in terms of ID
--------------------------------------
copies | observations surplus
----------+---------------------------
1 | 19757 0
--------------------------------------
连享会计量方法专题……
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD