上手 Stata

上手 Stata

这是 Stata 系列的课程 —— 《Stata 编程导论》的第一次课,本课程结合 An Introduction to Stata Programming (2ed) 和实际案例展开。

本次课程的主要目标是带领大家了解 Stata 编程语言、Stata 界面、Stata 的语法结构、运行方式的等。学习本课程能够增进你对 Stata 的认识,方便以后课程的开展。

视频讲解(预览版)

为什么你应该学习 Stata 编程

恰好今天看了 周晓时 的一篇博客,这篇博客开头有这么一段内容:

AEA 期刊有超过 70% 的论文使用 Stata (点击查看 Journal Report| 为什么要学习 Stata ?),而只有 3.8% 的学者采用 R。

其他经济学相关的期刊的数据估计也不会差太多,学习 Stata 可以让我们更有效的和其他研究者进行沟通。

上面是从实用性的角度来说的,那么从技术层面来看,学习 Stata 的理由可能是下面的一些:

  1. 通用性。Stata 是个跨平台的统计编程软件,这意味着你可以在任何平台上使用它,无论是 Windows OS 还是 Mac OS,甚至你还可以在 Linux 上使用它。作为一款商业软件,Stata 的集成了常用的各种数据处理、建模的程序,开箱即用。同时我觉得 Stata 最大的优势其实是它专业且细致的帮助文档,Stata 的官方帮助文档长达 20000 页。我曾经试图看过其中的几本,奈何没能坚持下去;
  2. 易用性。Stata 是命令式的语言,这意味着你可以通过 Stata 的一行命令完成很多事情,例如回归就是 reg 一下。Stata 是很容易上手的,通常大家仅仅需要两个小时了解下 Stata 的常用命令,就可以使用 Stata 进行数据探索和基础的统计分析和建模了;
  3. 速度还不错。Stata 里面有两种编程语言,DO 和 MATA。DO 语言是解释性语言(较慢),MATA 是编译性语言(较快,数百倍的块)。但是无论是快还是慢都是相对的,Stata 在处理通常任务的时候速度还是不错的,由于体量较小,Stata 的启动速度很赞。
  4. 完备性。这个是我编出来的词,就是说仅仅使用 Stata 就能完成几乎所有的工作,无论是数据处理
    统计建模还是图表制作和网络数据爬取(这个是搜集数据的过程中很重要的一步)。

总之,学习 Stata 可以让你有更高的工作效率。

一些基础的概念和工具

工作目录

和很多编程语言一样,Stata 也有工作目录的概念。设定工作目录非常重要,这是因为一旦你设定好了工作目录,你在读取和保存工作目录中的数据就不需要再添加文件夹的路径了。当你使用 use、save 之类的命令的时候,它们会在工作目录下面检索,如果没有找到就会报错,所以你应该把所有的数据
文件都放置在工作目录下面整理好。

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

在 Stata 的安装目录下面创建一个 profile.do 文件,然后在里面输入你想让 Stata 启动的时候自动运行的代码。例如你可以在里面设定你的默认工作目录(cd),清除 Stata 的启动输出(cls)。

Stata 的系统文件夹

运行 sysdir 命了可以返回一些文件夹的路径:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

这些文件夹是存放 Stata 命令、数据集的地方。建议不要碰前三个路径,Stata 的外部命令通常会被安装在 PLUS 文件夹里面,PERSONAL 文件夹可以用于放置用户自己编写的命令和数据集。OLDPLACE 通常不需要。

安装外部命令的方法有很多,其中最常用的要数 ssc 了,另外也可以使用 search 和 findit 进行命令查找和安装。国内的用户安装 ssc 会很慢,可以尝试使用 tssc,关于 tssc 可以阅读我的这篇文章了解它的使用方法:如何在几秒钟内完成 Stata 外部命令的安装

为什么需要这么多文件夹,原因非常简单,为了方便管理,但是路径多了就要明确谁优先的问题,adopath 命令运行的结果显示的顺序就是 Stata 检索命令和数据的顺序:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

第三个表示工作目录。使用中如果你不确定你用的命令是哪里的,可以使用 which 命令查看位置,例如 regress 命令:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

可以看到 regress 是存放在 BASE 文件夹下的命令。

用户还可以使用 adopath + 或者 adopath ++ 增加 ado 的路径,这个在进行大型项目组织的时候很有用,因为在大型项目中你可能会编写很多 Stata 命令或者说模块,这个时候你就可以把这些自编的 ado 文件存放的文件夹路径设置为 adopath/

数据类型

Stata 支持很多种数据类型,大体分为两类,数值型和字符型。细致的区分变量的类型不重要(例如数值型变量还分为 byte/int/long/float/double,字符型变量分为 str*/strL),这因为通常 Stata 可以自动准备足够长的空间容纳我们的数据并且大部分时候我们不需要考虑空间、内存这些问题(因为我们的数据集并不大)。

更高效的存储数据

使用 compress 命令可以把变量的长度自动减小到恰好能容纳数据以节省空间。根据我的实际使用经验来看,Stata 的 dta 格式的数据是一种非常浪费存储空间的数据格式,因为对于不经常使用或者用于网络传输的数据,不建议使用 dta 格式保存。

日期和时间的处理

Stata 支持丰富的日期格式。Stata 的日期起点是从 1960 年 1 月 1 日算起的,例如 Stata 中的 1960 年 1 月 2 日是使用数值 1 表示的:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

其他尺度的日期也是类似的,例如周:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

大家还可以自己试试月度、季度、年度的。

时间序列算子

Stata 中的时间序列算子有四种:

  1. L.: lags
  2. F.: forwards
  3. D.: differences
  4. S.: seasonal differences

进行这些运算之前需要使用 tsset 设定数据集中的时间索引变量。

关于滞后算子的例子可以参考:help tsvarlist

时间序列算子在面板数据的处理中也经常被使用(面板数据是使用 xtset 进行设定)。

因子变量与因子变量算子

关于因子变量算子的例子可以参考:help fvvarlist

例如创建因子变量可以使用 i. 运算符,例如:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

需要注意的是,i. 算子并不能用于变量的生成。

上面的程序等价于:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

大家比较下是不是和刚刚的结果一模一样。

思考:是否可以 regress y distance group1 group2 group3

创建交乘项可以使用 # 算子:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

这等价于什么呢?

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

思考:这里的 i.sex 项的系数哪里去了?常数项发生了什么变化?

还有一个更高级的算子:##

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

这等价于:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

也就是说它是个因子交乘算子。

关于边际效应的详细内容可以参考我出的这个教程:弹性、半弹性及其在 Stata 中的代码实现

错误处理

经常,我们需要程序在遇到错误的时候自动跳过,这个时候只要在程序的前面加个 capture 即可。如果你想隐藏程序运行的过程中打印的信息,可以给程序加个 quietly,反之加 noisily 可以确保信息被打印出来。

数据预保存和恢复

这个在循环中经常被用到,例如我们想把 auto.dta 数据集的前五行每行保存一个为一个单独的数据集,可以:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

思考:设计一个程序,使用 collapse 进行汇总统计之后再恢复原始数据进行回归分析。

把你的数据输入 Stata

我们通常遇到的数据有四种:

  1. dta 格式的,使用 use 命令即可读入;
  2. csv 格式的,使用 import delimited 命令读入;
  3. excel 格式的,使用 import excel 命令读入;
  4. 杂乱的数据。可以使用 infix 读入之后再慢慢处理。

更多格式的数据读入可以参考 help infilehelp import

案例:探索新冠疫情数据

使用 Stata 探索中国的新冠疫情数据:china-covid19.dta

我还出过一个高难度的使用 Stata 探索中国的新冠疫情数据的教程,可以看这里:使用 Stata 分析中国新冠疫情数据与制作动态图表

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

作业

使用 Stata 探索世界的新冠疫情数据:world-covid19.dta

总结

本节课并没有详细的介绍 Stata 的一些命令,而是泛述了 Stata 的一些基本工具。并通过一个案例演示了 Stata 进行数据处理的过程中最常用到的一些命令。大家感兴趣的话可以完成上面教程中的一些思考题和上面的作业。

知识星球附件链接:https://t.zsxq.com/YjEYjM3

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×