查看原文
其他

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

数据Seminar 2022-12-31

The following article is from Stata and Python数据分析 Author 爬虫俱乐部


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

本文转载自公众号:Stata and Python数据分析




导读


     在使用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的数据如下图所示:







星标⭐我们不迷路!
想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧

往期推荐

统计计量 | 遗漏变量?敏感性分析!新命令sensemakr

软件应用 | R的基础及进阶数据可视化功能包介绍

软件应用 | 分享几个简单易懂的Python技巧,能够极大地提高工作效率哦!

软件应用 | 一文介绍Pandas中的9种数据访问方式

数据呈现 | 对比学习,用Excel和Python绘制「子弹图」






数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


推荐 | 马纯菲


    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存