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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339