数据读入|一文读懂用Stata读入不同类型的数据

本文作者:乔昕悦,香港大学经管学院

本文编辑:王玉洁

技术总编:李婷婷

Stata&Python云端课程来啦!

为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦

导读
在使用Stata进行数据处理时,第一步往往是数据读入,往期推文我们也多次对于数据读入的一些方法进行了介绍,今天我们就数据读入的方法进行了一个总结,一起来看看吧!
在数据导入中,一般情况下我们需要导入三种类型的数据:Stata格式的数据,文本文档和Excel表格。
一、Stata格式(.dta)
1.sysuse 
sysuse能够读入Stata本身带有的数据库。通过sysuse dir我们可以知道sysuse能调用哪些数据(包括Stata本身带有的数据和当前路径下的dta格式的数据)。

我们可以通过如下命令选取最经典的auto进行读取:

sysuse auto, clear

2.use

① 读入电脑中已有的.dta文件

我们可以创建一个myauto.dta存入E盘的数据读入文件夹,然后通过use命令可以进行读入:
clearcd E:\数据读入sysuse autosave myauto.dta,replaceuse myauto.dta, clear

②从网站获取数据

使用use+数据网址可以直接从Stata网站上获取数据。

use http://www.stata-press.com/data/r9/auto.dta

3. webuse

webuse这个命令可以直接从Stata的网站上获取数据,和上边介绍use+Stata 网站上的数据网址可以达到同样的效果。

webuse lifeexp.dta, clear  //或通过use↓use https://www.stata-press.com/data/r16/lifeexp, clear
二、文本文档(.csv和.txt)

大多数情况下我们需要读入的数据并不是.dta格式的,因此需要使用其他的命令,在这里我们考虑.csv和.txt格式的文本文档为大家进行介绍。

常见文本文档的分隔方式分为四种:逗号分隔,制表符分隔,空格分隔、固定宽度的文本文档。在这里我们介绍的命令有insheet, import delimited, infix, infile

接下来通过一个包含学生的姓名,年龄和大学英语四六级考试的成绩的数据文件来介绍各个命令的使用。(Note:本文中用到的txt、csv、excel文件,大家有需要的话,可以后台回复“数据读入文件”获取噢~)

1. insheet

目前,insheet已被更高级的import delimited取代,从Stata13之后,insheet不再是Stata的正式命令,但我们可以继续使用insheet,在这里对insheet的数据读入方式进行一个简单介绍。
① 以逗号分隔

我们将以逗号分隔的.csv格式文件用文本文档打开,如下图所示:

通过如下程序可以进行读入:

clearcd E:\数据读入insheet using comma1.csv, clearinsheet name age CET4 CET6 using comma1.csv, clear //name age等是为了数据读入后有变量名

② 以制表符分隔

下图为用制表符分隔的文本文档:

可以通过如下程序实现数据读入:
insheet name age CET4 CET6 using tab1.txt, clear

③ 用空格分隔

下图为用空格分隔的文本文档:

空格分隔的文本文档也可以通过insheet读入,但在这里需要自定义空格为分隔符:
insheet name age CET4 CET6 using space1.txt, clear delimiter (' ') 

三种不同分隔方式读入的数据均如下图所示:

2. import delimited

  • 不指定分隔符时,Stata默认以逗号或制表符分隔:

import delimited name age CET4 CET6 using tab1.txt, clear
  • 指定分隔符时,分以下两种情况:

①默认情况下,如果写为:delimiter('djkbg'),则d,j,k,b,g每一个字符都是一个分隔符。

如果文本是以空格分隔的,可以定义空格为分隔符delimiter(' '),程序如下:

import delimited name age CET4 CET6 using space1.txt, clear delimiter (' ')
②若是一串字符作为一个整体是分隔符,则需加入asstring选项。

以%%%.txt为例:如下图所示,%%%.txt文件中我们所需的变量信息是以%%%分隔的。

这时我们使用import delimited读入上图文本文件的程序如下:
import delimited name age CET4 CET6 using %%%.txt, delimiter ('%%%', asstring) clear
如果对行和列进行限制,需要加入rowrange和colrange选项。e.g.tab1.txt为例,我们只想读第二到四行,第一到三列的信息:
import delimited name age CET4 using tab1.txt, rowrange(2:4) colrange(1:3) clear
或者:
import delimited name age CET4 using tab1.txt, rowrange(2) colrange(:3) clear
读入Stata的数据如下图所示:

3. infix

infix主要用于读入固定宽度的数据。我们以下面宽度不同的两种文本(fixedwidth1.txt 和 fixedwidth2.txt)来为大家介绍:

①变量单行排列,如图:

如果我们想读入上图所示的fixedwidth1.txt文本文件,程序如下:

infix str7 name 1-7 age 14-15 CET4 19-21 CET6 24-26 using fixedwidth1.txt, clear //name是字符型变量,前面要加str,age和CET4 CET6都是数值型变量
其中变量后面的“1-7”、“14-15”、”19-21“、”24-26“表示变量值所占的列数。
②变量多行排列,如图,第一行为姓名和四六级成绩,第二行为年龄:
这时候读入数据的程序如下:
infix 1: str name 1-7 CET4 17-19 CET6 22-24 2: age 1-2 using fixedwidth2.txt, clear
其中1:2:代表变量name和两次考试成绩的变量在文本文档的第一行,变量age在文本文档的第二行;  
读入的数据如下图所示:

4. infile

infile可以处理自由格式(free format)和固定格式(fixed format)的文本文档。

①自由格式

指通常用空格、制表符等分隔的文本文档,我们通过如下命令进行数据读入:

infile str7 name age CET4 CET6 using space1.txt, clear //当变量为字符型时,需用str指明

②固定格式

需要使用dictionary来读取,在之前的推文《 infile,你这是要搞事情啊!》中有详细的介绍,这里就不为大家赘述了。

三、Excel表格(.xls/xlsx)
对于Excel的读入需要用到不同于之前的命令import excel,在这里我们仍以大学英语四六级成绩为例,介绍读入单个Excel表格的用法。
在这里我们首先介绍三个常用选项:
  • firstrow:将Excel第一行设置为变量名

  • cellrange(start):设置表格读取的范围

  • sheet('sheetname'):读入选定表单

假如sheet1和sheet2分别是1701和1702两个班同学的成绩,如下图所示:
我们想查看1702班级的大学英语四级成绩,可以通过如下程序实现:
import excel using 成绩单.xlsx, first case(upper) cellrange(A1:C5) clear sheet ('1702')
其中:first是firstrow的缩写;case(upper)代表将变量名字母全部大写;cellrange(A1:C5)代表从A1读到C5;默认情况下import excel读入的是sheet1,加入sheet(“1702”)限定读入1702。
读入Stata的数据如下图所示:
以上就是本文介绍的基础数据读入的主要内容,这些命令还有很多的进阶用法噢~大家感兴趣的话可以读一读我们之前的推文介绍过的相关内容,希望大家都可以有所收获!
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
欢迎大家点赞、转发、评论哦!

对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

(0)

相关推荐