Chapter3——STATA数据整理

Chapter3——STATA数据整理

0. 数据整理关键命令

命令 命令解释 用法示例
drop 删除变量或观察值 drop math
keep 保留变量或观察值 keep math
append 将两个数据集拼接(观察值拼接) append using math
merge 将两个数据集合并(变量合并) merge id using math
reshape 将数据重整 reshape long inc,i(id) j(yr)
stack 将多列数据转换成一列数据 stack a b c d, into(e f)
xpose 数据转置
xpose,clear

流程图解释:

graph TD
数据A --> 数据连接与拆分
数据B --> 数据连接与拆分
数据连接与拆分 --> append --> 数据A和数据B上下纵向合并                          
数据连接与拆分 --> merge --> 数据A和数据B左右横向合并

1. 拆分数据

对于数据的拆分主要分成横向拆分和纵向拆分两种类型,横向拆分主要是通过保留和删除数据实现的,而纵向拆分主要是用过appendmerge来实现不同纵向行间的合并与拆分。

  1. 横向拆分数据

案例:将 mydata 数据分成三个数据文件,分别为学生基本信息文件student.dta, 经济学成绩文件 economy.dta 和数学成绩文件 math.dta。

cd d:/mydata/     //导入数据
use mydata,clear
drop economy math     //删除economy和math的变量
save student,replace   //保存删除变量后的文件为student
use mydata,clear  
keep id economy    //仅仅保持id和economy两个变量
save economy,clear  //保存删除变量后的文件为economy
use mydata,clear
keep id math
save math,replace
  1. 纵向拆分数据

案例:将 mydata 数据分成二个数据文件,分别为女生数据集 female.dta 和男生数据集 male.dta。

*讲mydata拆分成仅有女生数据集female.dta
use mydata,clear
keep if gender==0
save female,replace
*将mydata拆分成仅有男生数据集male.dta
use mydata,clear
drop if gender==0
save male,replace

2. 连接数据集

  1. 纵向合并数据集

案例:将女生数据集 female.dta 和男生数据集 male.dta 合并为新的数据集 mydata1 原始数据同上。

use male.dta
append using female     //使用female的数据集并入male中
save mydata1,replace
  1. 横向合并数据集

案例:将学生基本信息数据集 student.dta 和数学成绩 math.dta,经济学成绩economy.dta 合并为新的数据集 mydata2. 原始数据同上。

use economy,clear
sort id    //对economy的数据id进行sort
save economy,replace  
use student,clear 
sort id
merge id using economy     //使用economy的数据集匹配student数据集中的id,以id作为关联,将学生的信息和成绩一一对接
tab _merge    //显示对接情况,_merge显示为3表示对接成功,显示1和2则为为成功对接
drop _merge   //删除数据集中的表示对接是否成功的变量_merge
sort id
save mydata2,replace
use math,clear
sort id
save math,replace
use mydata2,clear
merge id using math
drop _merge
save mydata2,replace

3. 数据重整

  1. 关键命令
命令 命令解释 用法示例
reshape 将数据重整 reshape long inc,i(id) j(yr)
stack 将多列数据转换成一列数据 stack a b c d, into(e f)
xpose 数据转置 xpose, clear
  1. 面板数据重整

案例:数据集 mywide.dta 共有六个变量,其中后四个变量分别为 2003 年和2004 年的数据成绩和经济学成绩,现要求将数据转化为 mylong.dta 的格式,将年份单独做成变量,数学和经济学成绩则成为两个单独变量的面板数据集。

image-20221002224306422

use mywide,clear
reshape long math economy,i(id name) j(year)
save mylong,repalce
reshape wide

image-20221002224520106

  1. 多列数据转成少数几列数据

案例:以下的mystack数据集分成8行6列,但实际上只有一个变量x,将该数据恢复成只有一列的var被into到x变量的数据。

use mystack,clear
stack var1-var6,into(x),clear
drop _stack

4. 数据转置

案例:将math数据集中的数据进行行列互换

use math,clear
xpose,clear