如何用Stata完成(shui)一篇经济学论文(六):合并

普通文本合并

两个字符串的合并可以直接使用"+",比如

g x = "写"
g y="论文"
g xy = x + y
* 最终的输出结果就是"写论文"

还有一种是字符串形式用于乘法"*",比如

g xy3 = xy*3
* 最终的输出结果就是"写论文写论文写论文"

上面两种是字符串的合并运用,本来这篇还想继续讲数字运算的,想到也比较简单,就直接在这部分提一下,Stata中的加减乘除分别是"+" “-” “*” “/”,用法就很自然,跟excel里差不了太多,大家自行幻想一下就行。

数据表的合并

1. 横向合并

一方面我没有合适数据给大家练习,另外一方面就是横向合并我很少自己写代码,所以就直接举例子,相信大家也能看懂。这部分虽然只需要在Stata中点点点, 但是它很重要! 大家一定要把merge函数搞懂。

1.1 one-to-one 合并

假设我们有两个表,一个表里是学生信息,包含学号,姓名,身份证号,家庭住址(我们称之为学生信息表),另外一个表是这些学生的期末考试成绩,包含学号和成绩(称之为成绩表)。我们目前想把两个表里的信息整合到一起,已知学号是Unique的,每个表里不会同一个学号两次。所以首先我们打开学生信息表(或者成绩表)的dta文件,点击上方Data-Combine Datasets-Merge two datesets
在这里插入图片描述
接下来出现以下界面,因为学号在两个表中都是独一无二的,因为type of merge我们选择one-to-one on key variables,key variable是我们用来连接两张表的变量,这里就是学号(注意:学号在两个表里的变量名必须相同),最后,因为我们目前打开的是学生信息表,因为我们在下面的要合并表中,需要通过Browse找到成绩表。在这里插入图片描述
这里顺带提一句,大家在给变量取名的时候,最好用英文,中文变量名一方面可能会出现我们开始讲的乱码问题,另一方面在编辑code过程中,中英文切换也不那么方便,特别是标点符号,一不小心写了中文标点,报错之后挺不好找出来的。
在这里插入图片描述
在这里插入图片描述

在点击ok后,两张表就成功合并在一起,包含两张表的所有信息,外加一个新变量_merge。其中_merge == 3代表的是匹配成功的信息,_merge==1代表主表(学生信息表)中有,次表(成绩表)中没有的,_merge ==2代表主表中没有,次表中有的。(我这里没有出现_merge ==2的数据,大家理解意思就行)建议大家合并结束后,使用:

bro if _merge==1 //查看_merge==1的数据信息
bro if _merge==2 //查看_merge==2的数据信息

看看有哪些数据没有匹配上之后,酌情考虑删不删没匹配上的数据,希望大家能养成删除之前先把这两个条件的数据都调出来看一看的习惯,因为由于各种不可控原因,可能会出现匹配失误,这时候调出来看有助于发现这些失误。

这里 if 的条件判断我们会在下一篇讲,不过大家应该能明白这个代码的意思。删除数据我们用:

drop if _merge==1 //删除_merge==1的数据信息
drop if _merge==2 //删除_merge==2的数据信息

1.2 many-to-one & one-to-many

假设我们有两个表,一个表里仍然是学生信息,里面的学号是unique的,另外一个表是这些学生的两次期末考试成绩,包含学号,成绩和期末考试的次数(第一次或第二次)。此时,成绩表的学号不再unique了,每个学号会出现两次。所以此时我们会用到many-to-one(m:1)或者one-to-many(1:m)。

如果我们的主表是学生信息表,也就是其中的key variable是unique的,那我们用来匹配的次表就不是unique,此时我们应使用1:m匹配:在这里插入图片描述
如果要匹配的两个表有且仅有一个表的key variable是unique的,就要用m:1 或 1:m。至于什么时候用1:m,其实type of merge 里的描述很清楚了,当unique key for data in memory(你现在打开的表,也就是主表),用1:m;当unique key for data on disk(你即将匹配的表,或者你在下面Browse中要选择的表,即次表),用m:1。

匹配完之后的操作,与one-to-one相同,也是先浏览一下数据,再进行删除。

2. 纵向合并

纵向合并可以理解为一次性向某个表中插入多条数据。比如一个年级三个班,你现在有一班、二班、三班的学生信息分别在三个表中,你可以通过纵向合并,向一班插入二班、三班的学生信息,这样你就拥有了整个年级的学生信息表。这里我们要使用的函数是append,具体使用方法:

* 语法: append using filename *
append using Class_2.dta
aapend using Class_3.dta

这里需要注意的是,只有Class_2和Class_3所在根目录与打开Stata的根目录相同时(在同一个文件夹),才可以直接接文件名,否则要加上文件所在的路径,比如:

aapend using C:\Users\admin\AppData\Local\Class_3.dta

那怎样知道我们是从哪个目录打开Stata的呢?简单来说,如果你是通过双击dta的形式进入stata界面,那你目前的目录就是这个dta文件所在的文件夹,如果你是通过点击桌面Stata的快捷图标进入Stata,那你的目录就在安装Stata的文件夹。

append会自动合并两个表中相同变量的列,如果有些列主表中没有会自动创建,没有的地方就是空白。

References
https://www.jianshu.com/p/ce75a5d98bbd

猜你喜欢

转载自blog.csdn.net/Hedy_mail/article/details/108283875