一起来了解—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

example2master dataest,example1using 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中所有变量的值,且在两个数据集都有相同变量时(如x1x2),结果会以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),可以看到在进行两个数据集的合并时,只保留了example1x3变量,并且只有合并后的数据,没有标记变量。

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

可以观察到原本example2x1x2中缺失值都由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

当同时使用updatereplace时,会发现example2maser data)的重叠变量的值全部由example1中的值来代替,在example1using data)中重叠变量有缺失值除外。

3.4 assert,keep

使用这两个选项可以指定合并结果

use example2,clear
merge m:1 id using example1,assert(3)
list,sepby(id)
8.png

这时系统会报错,因为我们事先要求进行两个数据集的完全匹配,也就是以_merge=3的形式进行合并,但并不是所有的观察值都符合这种匹配方式的,所以会报错。这时可以去数据集看一下,和默认结果并没有什么不同,但不会展示。

9.png
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

你可能感兴趣的:(一起来了解—merge)