一起来了解—merge
小编本身就是一名python开发工程师,我自己花了三天时间整理了一套python学习教程,从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴点击下方链接即可领取
https://docs.qq.com/doc/DTGpFa2lVeE9jUkRv
1,导读
在我们的日常生活中经常会见到各种各样的表格,这些表格包含不同的信息。比如一个班主任,他有一个关于学生信息的表格,包括学生姓名,年龄等信息,各位任课老师也有这个班级学生的各科成绩。如果我们想进一步了解这个班级学生的信息,那么就会考虑把这些表格进行横向合并,这时就要用到我们今天介绍的命令—merge
。
2,命令介绍
merge
是将来自当前内存中的数据集(master dataset
)的相应观察值与来自外部的数据集(using dataset
)的观察值按照指定的关键变量进行横向拼接,具体有以下几种形式。
merge 1:1 varlist using filename [, options]
对指定的关键变量进行一对一的合并
merge m:1 varlist using filename [, options]
对指定的关键变量进行多对一的合并
merge 1:m varlist using filename [, options]
对指定的关键变量进行一对多的合并
merge m:m varlist using filename [, options]
对指定的关键变量进行多对多的合并
merge 1:1 _n using filename [, options]
通过观察值进行一对一的合并
注意:此处的"多"和"一"是指指定的关键变量再不同数据集中所对应的观察值。
3.选项介绍
merge
的选项比较多,在此处我们结合例子介绍一些比较常用的选项,主要选项有以下几个:
(1),keepusing(varlist)
:用来保留合并时using dataset
中的部分变量,默认保留全部。
(2),generate(newvar)
:产生一个新的用来标记合并结果的变量,默认情况下是_merge
。
(3),nogenerate
:不产生用来标记合并结果的变量。
(4),noreport
:不显示匹配结果表。
(5),update
:使用using dataset
中变量的值更新master dataset
中同名变量的缺失值,master dataset
中的非缺失值不变。
(6),replace
:使用using dataset
中变量的非缺失值代替master dataset
中同名变量的值,using dataset
中的缺失值对应的master dataset
中的同名变量值不变。此选项要和update
一起使用。
(7),force
:强制字符串/数字变量类型匹配而不会出错。
(8),keep(results)
:指定要保留的匹配结果。
(9),assert(results)
:指定执行所需的匹配结果。
首先我们先用input
输入两个数值变量类型,并将数据保存起来以备调用,命令如下:
clear all
cap mkdir d:/merge
cd d:/merge
input id x1 x2 x3 x4
1 0 1 1 4
2 1 1 2 2
3 1 . 3 2
4 . 3 5 1
10 2 4 3 5
end
save example1,replace
clear
input id x1 x2
1 0 1
1 . 1
2 1 3
2 2 .
3 2 4
4 1 .
4 2 3
20 2 4
end
save example2,replace
以example2
为master dataest,example1
为using dataset
,可以观察到以id
为关键变量进行合并是一个m:1
的合并,先看一下默认情况下的合并情况:
use example2,clear
merge m:1 id using example1
list,sepby(id) //在不同的id之间用横线分隔,便于观察
1.png
2.png
结果分为两部分,第一部分为匹配结果表,它展示了匹配结果的总体情况。从表中可以看出匹配成功的有七个观察值,匹配成功的标记即为_merge=3
;没有匹配成功的有两个观察值,结果分别为_merge=1
(数据仅仅来自master data
)和_merge=2
(数据仅仅来自using data
)。第二部分是把匹配结果展示出来,从中可以看到合并时默认保留了example1
中所有变量的值,且在两个数据集都有相同变量时(如x1
和x2
),结果会以master data
中的为主。
3.1 noreport
使用noreport
选项时,就会把默认情况下的第一部分省略,只剩第二部分的结果。
use example2,clear
merge m:1 id using example1,noreport
list,sepby(id)
3.png
3.2 generate,nogenerate
使用这两个选项可以改变标记合并结果的变量
use example2,clear
merge m:1 id using example1,keepusing(x3) nogenerate
list,sepby(id)
4.png
在上述命令中我们还使用了keepusing(x3)
,可以看到在进行两个数据集的合并时,只保留了example1
的x3
变量,并且只有合并后的数据,没有标记变量。
use example2,clear
merge m:1 id using example1,keepusing(x3) generate(type)
list,sepby(id)
5.png
使用generate(type)
产生一个用来标记合并结果的新变量type
。
3.3 update replace
使用这两个选项更新缺失值
use example2,clear
merge m:1 id using example1,update
list,sepby(id)
6.png
可以观察到原本example2
中x1
,x2
中缺失值都由example1
中的同样变量相应值进行了更新。除此之外,标记合并结果的变量除了之前的1、2、3的值外,有了4和5这两个值。其中_merge=4
代表至少一个缺失值被更新,没有与using data
(此处为example1
)冲突的非缺失值;_merge=5
代表其中至少一个重叠变量的值有和using data
(此处为example1
)冲突的非缺失值。
use example2,clear
merge m:1 id using example1,update replace
list,sepby(id)
7.png
当同时使用update
和replace
时,会发现example2
(maser data
)的重叠变量的值全部由example1
中的值来代替,在example1
(using data
)中重叠变量有缺失值除外。
3.4 assert,keep
使用这两个选项可以指定合并结果
use example2,clear
merge m:1 id using example1,assert(3)
list,sepby(id)
8.png
这时系统会报错,因为我们事先要求进行两个数据集的完全匹配,也就是以_merge=3
的形式进行合并,但并不是所有的观察值都符合这种匹配方式的,所以会报错。这时可以去数据集看一下,和默认结果并没有什么不同,但不会展示。
use example2,clear
merge m:1 id using example1,keep(3)
list,sepby(id)
10.png
当使用keep()
选项时要求为先进行默认的合并,然后保留_merge=3
的结果,如图所示,只保留了我们想要的结果。
以上就是小编今天为大家带来的内容,小编本身就是一名python开发工程师,我自己花了三天时间整理了一套python学习教程,从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴点击下方链接即可领取
https://docs.qq.com/doc/DTGpFa2lVeE9jUkRv