Stata:编写ado文件自动化执行常见任务

本文介绍了如何使用Stata通过编写do文件和ado文件实现数据分析任务的自动化,强调了自动化的重要性,提供了逐步指导,包括创建新命令、处理多个变量、使用if和in限定符等,帮助初学者掌握Stata程序的编写技巧。
摘要由CSDN通过智能技术生成

谢作翰 [译] | (知乎 | 简书 | 码云)


Stata连享会 精彩推文1 || 精彩推文2

编者按: 这是 Stata Blog 上的一篇推文,由浅入深地讲解了如何从一个简单的任务出发,逐步通过撰写 dofile,adofile 来实现任务的自动化可重复性执行。这篇推文帮助我们在不自觉中学会了编写标准的 Stata 程序 (ado 文件)。

原文地址 :https://blog.stata.com/2018/10/09/how-to-automate-common-tasks/

连享会计量方法专题……

高效进行数据分析的关键是将常见任务自动化。自动化能把你从大量重复性操作中拯救出来,不但节约时间,还能减少出错概率。

本篇让我们使用Stata自动执行一些任务。任务本身并不重要,重要的是熟悉自动化执行任务的流程。

我们选择的任务是将变量标准化——减去变量的均值并除以其标准差

正如您所知道的,Stata社区中有现成的命令来执行此操作,而且比我们接下来自己写更为便捷(在Stata中搜索 normalize variable);您也可以使用Stata的egen命令对单个变量标准化,但我们打算做的远不止如此。

我认为本文读者是Stata自动化任务的新手。所以,如果您已经是专家,可能对这篇文章不感兴趣,当然也可能会一些新的发现。

1. 使用脚本文件

首先,我们将直接在分析脚本中执行标准化操作。在Stata中,我们将分析脚本称为 do-files,因为它们可以执行某些操作。

让我们把原始变量命名为 x。因为我们不想改变现有变量的内容,所有新建一个变量 xN,其中 N 后缀表示标准化(如果您不喜欢 N 后缀,可以改变,比如 _norm,也可使用前缀)。Stata 的 summarize 命令将给出原始变量平均值和标准差。

*-----------begin------mydo.do-----
···
summarize x
generate xN = (x - r(mean)) / r(sd)
···
*-----------end--------mydo.do-----

如上,对一个变量标准化只需要两行代码即可。

r(mean)r(sd) 是什么意思,我们又该如何了解它们?

它们分别表示变量均值和标准差的返回值。

在 Stata 中,几乎所有命令都会返回结果。已模型估计为主要目标的命令 (如 regress, logit 等) 的返回结果以 e() 表示,大多数其他命令以 r() 表示。输入 help summarize 并拉到帮助文件的底部就能看到 summarize 返回的所有结果及其描述。也可以在执行完 summaryrize 命令后输入 return list 命令来查看返回值列表。

既然我们的任务只有两行,那为什么我们要自动化呢?

因为当我们需要大量重复操作时,即使只有两行代码,也极易出错。比如,我们想复制这段代码 100 次进行 100 个变量标准化时,我们必须将代码中变量名 x 更改为 100 个新的变量名称,但是我们往往会忘记。你可能会忘记更改 summarize 中的 x,或是忘记更改 xN,并收到报错消息。或是忘记更改在表达式中的变量名。这三种错误我都犯过。

2. 使用 Do 文件自动化执行

我们将脚本放入自己的do-file中。

normalize.do (1)

version 15.1

summarize x
generate xN = (x - r(mean)) / r(sd)

ps:在文件顶部我添加了版本命令。请切记,一定要为你的do文件标明版本信息!我使用的是 Stata 15.1,一旦标记上,这个脚本将始终以 15.1 版 stata 的特性运行,即使将来用 Stata 42 版运行这个文件(可能 42 版的 stata 早已取消 summarize 命令或完全改变 summarize 的工作方式)但 Stata 会识别出版本号,并按 15.1 版本的语法规则正常运行。

我们通过输入以下命令执行所写的脚本

. do normalize

或者在直接在do文件里添加 do normalize 语句。

我们目前的 normalize.do 并不太有趣。我们需要它来处理除 x 之外的变量。

这是一个版本:

normalize.do

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值