这是教对象Stata系列视频的配套代码。对应视频与笔记链接请见下方链接,配套代码请见分割线下方。

视频合集

bilibili视频链接

配套笔记链接


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/* Do File Note:
日期:2023年1月26日
主题:stata 变量管理、统计分析与数据管理
内容:1. 变量管理(3): 数值型与字符型变量转换
2. 统计分析: 常用命令与分析方法
3. 数据管理(1): append 数据接驳 (纵向拼接)
4. 数据管理(2): merge 数据匹配 (横向合并)
5. 数据管理综合案例 */


******************************** 一、变量管理(3) ********************************
* 相关命令: tostring、destring
* 相关链接: 「Stata 数据格式转换」https://fgzfgz.github.io/posts/33587/

** 1. tostring 命令: 数值型 --> 字符型
webuse lifeexp,clear
tostring region, g(region2) // 生成新变量
tostring region, replace // 替换原有变量
tostring *, replace // 所有变量转化为字符型
tostring *, replace force // 忽略信息缺失,强制转化为字符型

** 2. destring 命令: 字符型 --> 数值型
webuse destring2, clear
destring date, i(" ") gen(newdate)
destring percent, i("%") replace
destring price, i("$" ",") g(price2) // 忽略多个文本字符
destring price, i("$") replace force // 删除带文本字符的数据,强制转化为数值型


********************************** 二、统计分析 **********************************
* 相关命令: list、summ、tab、tabstat、table
* 相关链接: 「统计分析」 https://fgzfgz.github.io/posts/15857/

** 1. list 命令
webuse lifeexp, clear
** 1.1 查看所有变量所有样本
list
** 1.2 配合in使用: 特定位置样本取值列表
gsort + safewater
list safewater in 1/20 // 前20个样本取值
gsort - safewater
list safewater in 1/20 // 前20个样本取值
** 1.3 配合IF使用: 特定条件的取值列表
list country safewater if region==1 // 查看亚欧国家的safewater得分

** 2. summ 命令
summ lexp safewater // 样本数、均值、标准差、最大值、最小值
summ lexp safewater, d // 逐个变量单独显示详情
// 配合 if(或in) 使用
summ lexp safewater if region==1

** 3. tab 命令
** 3.1 缺失值
tab safewater
tab safewater, m
** 3.2 变量标签
tab region
tab region, nol
** 3.3 带IF条件
tab lexp if region==1

** 4. tabstat 命令
** 4.1 分组查看: 样本数、均值、最大值、最小值、标准差、极差
tabstat lexp, stat(n mean max min sd range) f(%9.3f) by(region) // 保留三位小数
** 4.2 百分位数
tabstat lexp, stat(p1 p5 p10 q p90 p95 p99) f(%9.3f) by(region) // 保留三位小数


******************************** 三、数据管理(1) ********************************
* 相关命令: 数据接驳 (纵向拼接) —— append
* 相关链接: 「Stata数据匹配、接驳」https://fgzfgz.github.io/posts/19316/

cd "C:/Users/wugan/Desktop/教对象Stata系列/第3课:变量管理、统计分析与数据管理/示范数据"
** 1. 拆分亚洲与美洲国家数据
webuse lifeexp, clear
keep if region==1
save "亚欧", replace
webuse lifeexp, clear
keep if region!=1
save "美洲",replace

** 2. 数据接驳: 亚欧+美洲
use "亚欧", clear
append using "美洲"
save "亚欧+美洲", replace


******************************** 四、数据管理(2) ********************************
* 相关命令: 数据匹配 (横向合并) —— merge
* 内容: 地级市数据——经济数据+气象数据
* 相关数据: 1. 2000-2022年城市气象数据
* 2. 2000-2021年地级市分产业增加值数据
/* 相关链接: 「Stata数据匹配、接驳」https://fgzfgz.github.io/posts/19316/ */

** 1. 数据匹配
use "气象数据", clear
merge 1:1 CID using "产业增加值" // 问题1: 识别变量不同
rename CID 城市代码
merge 1:1 城市代码 using "产业增加值" // 问题2: 识别变量对应关系错误
rename year 年份
merge 1:1 年份 城市代码 using "产业增加值" // 问题3: 识别变量的类型不同
** 2. 解决问题3——识别变量的类型不同
// 使用force
merge 1:1 年份 城市代码 using "产业增加值", force
// 转换变量类型
destring 年份 城市代码, replace
merge 1:1 年份 城市代码 using "产业增加值" // 关注未匹配成功样本
keep if _merge==3
save "气象+增加值", replace


********************************** 五、综合案例 **********************************
* 相关命令: append、merge、egen
* 内容: 使用2016、2018年CFPS数据计算家庭规模与成员平均年龄,并与家庭收入、支出数据合并,生成一个家庭数据。
* 相关变量: 1) 家庭经济库——家庭收入、家庭支出; 2) 家庭成员关系库——家庭规模、成员平均年龄
cd "C:/Users/wugan/Desktop/教对象Stata系列/第3课:变量管理、统计分析与数据管理/综合案例数据"
** 1. 2018年数据
** 1.1 家庭收入、家庭支出
use "CFPS2018/2018家庭经济", clear
keep fid18 cyear fwage_1 foperate_1 fproperty_1 ftransfer_1 felse_1 fincome1 daily-expense
save "DATA/2018家庭经济",replace
** 1.2 家庭规模、家庭成员平均年龄
use "CFPS2018/2018家庭成员关系", clear
egen famsize=count(fid18), by(fid18)
label var famsize "家庭规模"
egen famage=mean(2018-tb1y_a_p), by(fid18)
label var famage "家庭平均年龄"
keep fid18 cyear famsize famage
** 1.3 删除重复样本
duplicates drop fid18, force
save "DATA/2018家庭成员关系",replace
** 1.4 数据匹配
use "DATA/2018家庭经济", clear
merge 1:1 fid18 using "DATA/2018家庭成员关系"
keep if _merge==3
save "DATA/CFPS2018", replace

** 2. 2016年数据
** 2.1 家庭收入、家庭支出
use "CFPS2016/2016家庭经济", clear
keep fid16 cyear fwage_1 foperate_1 fproperty_1 ftransfer_1 felse_1 fincome1 daily-expense
save "DATA/2016家庭经济",replace
** 2.2 家庭规模、家庭成员平均年龄
use "CFPS2016/2016家庭成员关系", clear
egen famsize=count(fid16), by(fid16)
label var famsize "家庭规模"
egen famage=mean(2016-tb1y_a_p), by(fid16)
label var famage "家庭平均年龄"
keep fid16 cyear famsize famage
** 2.3 删除重复样本
duplicates drop fid16, force
save "DATA/2016家庭成员关系",replace
** 2.4 数据匹配
use "DATA/2016家庭经济", clear
merge 1:1 fid16 using "DATA/2016家庭成员关系"
keep if _merge==3
save "DATA/CFPS2016", replace

** 3. 数据接驳
use "DATA/CFPS2018", clear
append using "DATA/CFPS2016" // fid编码问题待修正
rename fid18 fid
replace fid=fid16 if fid==. & fid16!=.
drop fid16 _merge
save "DATA/CFPS(16-18)", replace