本文来源 :Knittel, Christopher R., and Konstantinos Metaxoglou. “Working with Data: Two Empiricists’ Experience.” Journal of Econometric Methods 7, no. 1 (March 9, 2016)
英文标题 :Working with Data: Two Empiricists’ Experience
中文标题 :处理数据:两位经验主义者的经验
发布 :http://dx.doi.org/10.1515/JEM-2016-0001
出版商 :Walter de Gruyter GmbH
导出 :http://hdl.handle.net/1721.1/120479
翻译说明 :(1)本(系列)论文翻译稿由启研学社实习生完成,旨在帮助本科生或低年级研究生交流经验研究的方法;(2)本翻译稿仅用于学习交流,请勿用于商业目的。
注 关注我们,公众号内发送关键词“20210218 ”。获取PDF版
处理数据:两位经验研究者的经验 Knittel, Christopher R. Konstantinos Metaxoglou
启研学社·彭绮荣 译
摘要 :我们从自己的经验中总结了一组关于如何组织经验研究的最佳实践。并着眼于质量控制、文献记录和可复制性提出了一些关于有效组织、处理和分析数据的思路。尽管这些最佳方法不是唯一的,但是多年来它为我们以及身边的同事提供了很好的服务。我们希望这些方法能够对学生及年轻的经济学家的研究有所帮助。
关键词 :最佳实践 数据 文献记录 经验研究
一、引言 要产出一篇高质量的经验研究(文章)不是一件容易的事情,需要许多技术和天资。本文面向正在学术界、研究机构、政府部门或者私营部门工作的经济学者提供了一些关于如何在经验研究中流程化工作的方法。从一般的组织原则到特殊的编程建议和技巧,我们提出的方法绝不是组织经验研究的唯一方式。这些方法不仅为我们提供了诸多帮助,我们也希望它们能够或多或少地为读者提供一些帮助。¹ 在进行经验研究时,无论它是否是学术性研究,我们都需要使其有序地进行。在学术界,很少有论文能够在第一次提交后就被人们接受,大多数论文需要经过持续几个月甚至几年的修改过程。与此同时,你已经在另一个项目上投入了大量的时间,对现在“修改和重新提交”的论文细节的熟悉程度会逐渐减弱。有序组织研究有助于回应审稿人关于修改现有分析或补充分析的要求 。此外,许多期刊(如美国经济学会出版的期刊)为了便于复制,要求作者披露他们的代码和数据,因此,可复制性在学术研究中也是至关重要的。经济学专业的另一个现实是,论文中很大一部分是合作的产物,由此看来,团结协作也是保持组织性的一个非常好的理由,特别是当合作者第一次合作时。一些简单的基本规则,比如如何存储和处理原始数据,组织分析,以及维护稿件的版本控制等,都能保障合作顺利、高效地进行。在学术界之外进行经验研究也需要类似的过程,如中央银行或政府机构的报告,其最终成型的过程与学术论文非常相似。在私营部门里,快速的工作节奏、客户的预算和紧迫的时间安排都是在准备专家报告或白皮书时要有序组织的额外原因。在诉讼中,反方经济专家及其团队现在扮演着鉴定员的角色。私营部门的工作量和时间限制使合作成为一种惯例而不是例外。简而言之,我们在本文中描述的最佳方法可以对所有经验经济学家适用。 在本文的其余部分,我们将描述这些做法,首先在第2节中提出一些关于软件的建议。然后,在第3节中讨论电子工作空间的组织,主要是指你自己的硬盘或您从云端别人那里租用的云盘中的文件夹结构 ,在第4-9节讨论的主题将涵盖从处理原始数据到撰写初稿的各个方面。 二、软件 我们不会建议用户应该使用哪个操作系统(O/S)。有的使用Windows,有的使用Mac OS,它们可以在没有(太多)争论的情况下一起工作,至少对于我们来说是这样的。此外,这里讨论的软件在PC和MAC电脑上均适用。 不论选择哪种操作系统,云计算已经彻底改变了我们存储,访问和共享文件的方式。我们一般使用Dropbox执行这些任务,因为它是一个非常方便的存储系统,允许多个用户访问最新资料,而无需手动移动和更新文件,从而增加过期文件导致错误的风险。它提供了多种价格合理的订阅计划。在桌面应用程序中,Dropbox会像其他文件夹一样显示在用户的电脑上。只要电脑连接到互联网,存储在里面的文件就会自动更新,用户还可以通过手机APP看到Dropbox文件夹的内容。Dropbox也无需备份,因为如果你订阅了适当的计划,它会自动更新。随着最近云计算的发展,有许多替代产品出现,如Google Drive和OneDrive,其中有一些产品是免费的。(译者注:国内也有相似功能、体验良好的软件,如坚果云。如果是一个团队,一些服务商也提供私有部署的软硬件系统,比如群晖、威联通。 ) 一旦确定了研究问题和待检验的假设,经验研究的工作通常需要以下步骤:(一)获取原始数据;(二)准备后续分析所需的数据;(三)进行分析;(四)撰写报告研究结果的论文。其中,原始数据可以通过网络或者其他资源获得。网络上可获得的数据是巨大的财富,如果知道如何有效地访问它们,那将非常有用。对于简单的HTTP请求,我们可以使用Perl中的LWP函数。特别是当链接地址以一致的方式组织时,Perl能够以非常简单的语法允许用户获取和存储大量发布在Web上的文件类型。² 我们主要运用Stata(不是唯一)来处理原始数据并准备分析。Stata允许用户使用几个简单的命令和一个非常简单的方法从多种格式(如CSV,TXT,XLSX)中导入数据。SAS也是一个有用的数据处理工具,它能比Stata更有效地管理大型数据集,但它的价格要高得多,而且令人生畏。Stata还能够将数据导出为包括Excel在内的多种格式,这对进行基本的数据探索非常有用。 Excel中的数据透视表和图表对于(初步的)数据探索和分析特别有用,它们允许用户审查和分析数据,生成漂亮的可视化和表格,具有很大的灵活性。不建议使用Excel进行公式分析,因为审核Excel电子表格可不是件容易的事情。然而,数据透视表和图表不需要依赖任何公式,因为它们可以基于从其他软件(如Stata)直接导出的数据生成图表。你可以在Excel中使用宏指令来进行自动化处理,例如创建带有描述性统计和回归结果的表格或生成数字,然后再将其导入草稿中。 Stata和MATLAB是两个非常强大的计量分析工具。Stata特别友好,非常适合“现成的”估计,因为它有大量适用于横截面、面板和时间序列数据的内置命令和估计程序。此外,它有一个非常庞大的用户社区,用户贡献了自己的命令和编程,你可以非常容易地运用他们的命令行进行访问。³ Stata也有自己的期刊,而且它在本科生和研究生计量经济学教科书中非常流行,如Wooldridge(2013)和Cameron和Trivedi(2005)。很多同行认为,在计量经济学的时间序列方面,SAS也非常强大,Eviews也是如此,也有人会主张使用R,因为R是免费的。MATLAB可以更好地处理定制化练习(customized exercises),比如工业组织模型的模拟、非线性最优化、一般均衡模型的求解等等。与Stata类似,R和MATLAB都有一个非常庞大的用户社区,用户们将其非常丰富的函数集集中分享。⁴ Gauss和Octave是MATLAB的两个替代软件。Dynare对于求解宏观经济学中的动态随机一般均衡模型是一个非常好的补充。在挖掘文本的时候,必要时我们可以利用Perl和Python中强大的功能来访问PDF文件中的内容。⁵ 除了Perl、Python、R、Octave和Dynare之外,这里讨论的软件需要获得许可才能安装,其中可能包括年度维护费。我们认为,并不是任何一款软件在所有方面都同样优秀。 我们的大部分写作都是用LaTeX,它是学术书籍和期刊专业排版的黄金标准。它的功能非常强大,在网络上有大量的免费资源。⁶ 它最大的优势之一是能与PDF文件无缝交互,这一点将在下面详细描述。然而,任何事物都不是完美的,它的一大缺点就是创建表格非常痛苦并且耗费时间。不过,我们在后续的章节中会有一个技巧来解决这个问题。绝大多数接触它的用户在第一周就讨厌它,会一直在想为什么要放弃Microsoft Word,但是他们中的很大一部分人,尤其是那些倾向于编程的人,最终都会欣赏它。用LaTeX写作与用编程语言写作非常相似,因为它涉及到语法。原则上,可以用最简单的方式编写LaTeX文本编辑器,如Windows的记事本,但是,有许多编辑器通过包含语法高亮和快捷键使得LaTeX的体验更加愉快,例如MikTeX、TeXnicCenter和Texmaker,而且它们都是免费的,还允许定制字体和大小、语法颜色、快捷键等等。⁷ 根据我们的经验,学习如何使用LaTeX的最好方法是“通过复制进行学习”——使用并逐步修改别人的文件。此外,我们还会使用BibTeX,它是一种工具和文件格式,用来结合LaTeX文件编译参考文献列表。BibTeX允许用户创建和维护一个参考文献的主数据库来用于不同的研究项目。 三、组织你的电子工作空间 对于大多数应用经济学家来说,电脑就是他们的工作室,所以,一个有条理的工作室需要一个便于浏览的文件夹结构。当几个用户访问同一资料时,这一点就显得非常重要。通常我们倾向于遵循表1中的文件夹结构: 表1:文件夹结构
文件夹 子文件夹 Data(数据) Archive, Input, Temp, Logs, Scripts, Output Analysis(分析) Archive, Input, Temp, Logs, Scripts, Output, Figures, Tables Literature(文献) Archive, topic Background(背景) Archive, topic Drafts(草稿) Archive Notes(笔记) Archive Communication(交流) Archive, Inbox, Outbox
这个文件夹结构也将作为我们讨论剩余部分的框架,剩下的部分大部分内容将是我们对每个文件夹的描述。 在Data(数据)文件夹中,我们保存了原始数据文件和干净的数据文件,以及从原始数据文件创建干净数据文件的相应代码。我们在Analysis(分析)文件夹中保存数据相关的任务,如描述性统计、图表、回归、模拟等。如果使用多个数据集,我们建议为每个数据集建立一个Data(数据)文件夹。同样,我们也为每一种类型的分析单独保留Analysis(分析)文件夹。 在Literature(文献)文件夹中,我们保存在工作中引用的各种学术论文的PDF文件。当文件数量增加时,可以按主题或其他原则来组织这些文献。在Background(背景)文件夹中,我们保存所有对我们的研究有帮助的背景材料但不是学术论文的文件,例如行业和监管背景。这些材料有助于我们在开始一个新项目时了解我们将要研究的课题,其中很多材料会在最后的论文中被引用。 在Drafts(草稿)文件夹中,我们可以保存一个“活动的(live)”草稿,不断地更新和编辑,以及论文的存档版本。归档总比删除好,因为对于大多数人来说,写作是一项可怕的任务,而空间是比较便宜的。我们把Notes(笔记)文件夹里的材料当作一个关于确定的思路、相关材料、待办事项、无果的对话等等的长长的日志记录,它在大多数时候比实际需要的更长。实际上,“厨房水槽(kitchen sink)”可能会是一个更合适的名字。最后,在Communication(交流)文件夹中,我们存储着与我们工作有关的信件,这里面几乎全是电子邮件。 在详细介绍每个文件夹的结构之前,我们对如何控制一个特定文件的多个版本以及何时删除废弃的文件有一些建议。每当你需要更改别人创建或编写的文件或草稿时,我们建议以你的名字缩写制作一份相关文件的副本。此外,在文件名中使用前缀,日期写成 “yyyy.mm.dd.”,如2015.07.10_TASK_KM.do
,可能会更好。随着时间的推移清理过时的文件是有必要的。同样,在项目达到某个阶段或接近完成之前,归档比删除材料可能更好。一旦你确定文件中包含的是不再需要的材料,你就可以删除它们。在达到这个清理阶段之前,你最好为更新的旧版本文件保留一个Archive(归档)文件夹,在Archive(归档)文件夹前加上下划线或斜线等字符,会更加醒目,因为它将(几乎总是)出现在屏幕的顶部。 四、数据 4.1 组织结构 实证研究通常依赖于多个数据集。对于每个数据集,我们建议采用以下文件夹结构:Input, Temp, Logs, Scripts, and Output。我们将原始数据保存在Input文件夹中,并将数据处理的中间步骤中创建的文件保存在Temp文件夹中。干净的数据集则放在Output文件夹中。需要注意的是,为了能够对分析进行重复,我们保持原始数据文件的原始状态。对数据的任何处理都要保存在一个单独的文件中。我们为绝大多数的数据处理编写代码,并将这些代码文件保存在Scripts文件夹中,而不是在excel文件中修改数据或在Stata中运行命令而不保存在Script中,这样做有两个好处:不仅记录了你所做的事情,最重要的是,你、你的合作者或其他人,可以复制和检查你所做的事情。 养成用Log文件去记录数据处理Script的好习惯,因为它不仅可以跟踪数据处理的各个步骤,并找出重复记录和缺失的数据字段等问题,还可以让你审查处理过的数据,而不必耗费时间去重新运行代码。我们普遍的做法是将此类文件保存在Logs文件夹中,并使用与处理数据Script相同的名称,以方便交叉检查,再将处理后的数据以一种可以分析的格式存储在Output文件夹中。我们把所有这些步骤看作是我们对数据的初步分类。 4.2 文档说明(documentation) 数据集文档说明的一个基本原则是,要确保能够提供足够的信息,以便任何人都能在没有任何帮助的情况下恢复到相同的数据。除此之外,它对引用数据和检查数据更新和修订非常有用,这在政府机构发布的数据中非常常见。 记录数据来源的一种便捷方法就是在Input文件夹里创建一个自述(ReadMe)文件。当涉及到从网络上访问的数据时,记录详细的链接和访问该链接的日期。例如,在引用美国能源信息署的特定数据集时,不要引用? www.eia.gov这个网址,因为该机构的网站上有大量的数据。在大多数情况下,一个简单的自述文件能够很好地发挥作用。当与他人合作时,最好注明收集数据的人(如:某人于2015年1月25日收集);以这种方式记录,不仅节省了时间,并且在对数据的来源有疑问时,可以直接询问相关的人以免来回奔波。 通过CTRL+Print Screen
和CTRL+V
,可以在Excel或Word文件中存储网站下载数据的截图,以便于跟踪访问数据的各种步骤。虽然这看起来很麻烦,但可以避免将来在重新创建下载的数据或在更新数据时浪费时间。如果需要从网络上获得大量文件,建议使用Perl或Python。 4.3脚本(Scripts) 本节中的建议完全基于我们使用Stata的经验,因为Stata在经济学家中非常流行。然而,根据与同事和学生的交谈,我们相信类似的建议对其他流行的统计软件也有效。同样,我们并不打算去辨别什么软件才是“最好”的,而只是根据我们的经验,提供一些有用的标准。以下是使用Stata时需要注意的事项: 1、学会阅读手册(Manual) 。Stata的所有命令都有一个非常工整的PDF文档。在其命令行中输入man command
或help command
(如man regress
)会显示该指令的描述,包括对应PDF的超链接,更重要的是,PDF文档中包含了关于方法(Methods )和公式(Formulas )的部分,介绍了各种可用的估算程序。2.用一种方式编写代码 。从本质上讲,就是要形成代码标识,这在合作者之间分享和审查代码时非常有帮助。一些有用的和标准的程序包括:在脚本的一开始就定义好各种文件所在的所有路径,然后导入数据,再继续操作数据等;并且以一致的方式进行。早日熟悉别人的风格,然后形成自己的风格,是非常有帮助的。(b) capture log close
:关闭所有文件 (c) set type double
:导入文件时使用双倍数值精度 (d) set more off
:避免在执行多屏代码时需要按任何键 (Stata的最新版本不需要设置内存来加载文件,所以不需要像以前那样设置内存。) 3.使用全局(globals)或局部(locals)来定义(最好是相关的)路径,在脚本开始时将文件保存在那里,换句话说就是不要用代码固定路径,尤其是当需要重复使用这些代码的时候 。想象一下,你清理或重命名文件夹或者你的合作者想使用相同的脚本,但他的Dropbox文件夹有不同的结构。在脚本的开头改变一个全局非常容易,而改变多行硬代码路径通常是造成麻烦的导火线。(译者注:这里的意思是说,如果你在代码中把文件的路径写死了,比如C盘,a文件夹下面,b子文件夹下面的c文件。那么当合作者把文件放在D盘,c文件夹下面时,要运行这段代码,就需要整个代码凡是涉及到调用c文件时都要进行文件路径的调整,这将会非常麻烦。 )4.Stata的编辑器不会自动断行以适应屏幕,所以在编写指令的时候不要超过合理的列数 。即使使用24英寸的屏幕,80列也会是一个很合适的数字,且其在当今十分普遍,所以请牢记它。如果你想使用长命令(使用用于调整图形格式的选项时通常会是这种情况),#delimit
可以将一个命令分割成多行。5.在代码中使用许多注释(comments)可以用来确定代码所做的主要步骤,最重要的是可以提醒你在很久以前为什么做这件事,用几句话在顶部解释代码的作用通常很有用 。在正文中标注的注释应该要明显一点,例如,永远不要让它们超过80个字符。如上所述,任何显示器都可以容纳这些字符数,不需要左右滚动。在注释上下各放一行长度相同的线,只用星号(或任何你喜欢的符号)作为分隔符,这样做可以使注释更显眼。6.很多时候有必要去导入和处理结构相同的多个数据文件。例如,在我们的一个研究项目中,必须将美国环境保护局的几个用逗号分隔的文件导入Stata中,这些文件在每个州和每个月的单独文件中包含有与排放有关的信息 。在这种情况下,我们推荐使用循环,第一个是在州上循环,第二个是在年上,最后一个是在月上,然后使用循环中的局部(locals)来命名文件。当你使用循环时,请确保你的代码保持缩进,然而Stata没有自动缩进功能。假设这三个嵌套循环运用了变量i,j,和k,那么你就可以在Temp文件夹中保存一个名称为emissions_‘i’_‘j’_‘k’.dta
的文件。由于现在文件名已经标准化了,你可以用同样的方式使用循环添加这些中间文件,最后保存为一个文件,比如说,在Output文件夹中的文件名为emissions_all.dta
。使用循环而不是“复制和粘贴”不仅看起来美观,还能减少错误,因为编码中的大多数错误不是发生在不断地更新中,而是发生在复制和粘贴过程中。7.习惯于用“IMPORT-and-APPEND”这样有区别必要时可独立的步骤来构造代码 。例如,在编辑和运行APPEND步骤的代码时,可以将可能会相当耗时的IMPORT步骤的代码标为注释(即把代码转化为注释,使其不执行导入命令)。能够分门别类(compartmentalizing)对任何人的代码来说都是很好的特征。(译者注 **:这里的意思是说,有些数据导入非常费时,如果原始数据没有变化,只要一次导入即可。因此数据导入部分的代码,运行一次之后,就可以将其变为注释,避免浪费时间。**)8.在导入数据时,最好保持原始的变量名 。在某些情况下,如果变量名超过了Stata所能容纳的长度,就需要更改它们。除此之外,你还要检查你的数据是否有重复记录(duplicate records
)。在检查的时候用一个指示变量来标记会比较方便,你可以将它命名为“flag_dup_tag
”。9.当生成包含相似信息的变量时,使用一组可以轻松地使用通配符(wildcards)对进行排序,汇总和编辑的名称会很有帮助 。例如,假设你有一个名义价格和一个实际价格变量,将它们命名为price_nom
和price_real
(不是nom_price
和real_price
),因为你可以输入 sum price_*
并得到它们的描述性统计量。10.避免使用长的变量名 。有时候短的变量名更具表达意义,例如gross_domestic_product_united_states
信息量不见得比gdp_usa
大多少(如果有的话)。11.学习如何使用正则表达式(regular expressions,regexm
) 。你可以用它来处理数据,因为它在清理和标准化字符串字段方面非常强大。12.学习如何正确合并数据。我们强烈建议使用一对一(1:1)、一对多(1:m)和多对一(m:1)选项 。在合并后建议使用assert
指令,以确保你的合并做了想要它做的事。值得注意的是,在合并过程中往往会出现常见但又容易被忽略的错误。13.学习如何将数据从长格式到宽格式的转换,反之亦然 。这是用reshape命令完成的。熟悉reshape的一个原因是Stata-Excel之间的交互。Excel数据透视表对长格式的数据效果最好。14.存储数值变量时,要对其进行格式化 。例如,Stata中的逗号格式format%XX.YYf
允许从总共XX位数中指定YY位小数。当数值大于十亿时很难去追踪,所以要用百万或千位。格式化并不影响数值变量存储方式的准确性,但它看起来会更显眼。当你从Stata导出数据到Excel时,请确保其带了大量的小数点。此外,还要学习格式化日期相关字段的其他方法,并注意如何导出日期。你需要以特定的方式格式化日期字段,这样当你从Excel导入数据或导出数据时,它们就不会变形。15.在使用collapse
和egen
命令时,要特别小心缺失值,因为这两个命令经常用于生成描述性统计 。例如,如果变量quantity
只有缺失值,collapse (mean) quantity
将产生“.(这是Stata存储缺失值的方式)”,但collapse (sum) quantity
将产生零。egen
命令也是如此。16.了解如何使用return list和ereturn list从Stata的结果(output)中提取信息 。当您想在带有估计结果信息的表格底部添加信息时,使用outreg2
就会非常方便。17.你可以按Ctrl+D
或Ctrl+R
高亮或者执行跨越多行的代码段,前者将在屏幕上输出结果,而后者则不会 。对于那些熟悉MATLAB的人来说,这相当于选择代码并按F9键。如果你想快速尝试,这将会非常方便。还有最后一个小技巧,就是在Windows系统中,一旦脚本完成,可以用Stata给你发送一封电子邮件。当你的脚本在后台运行数小时或数天时,emailme
程序会非常方便。⁸ 4.3.1调试 谈到代码,总会引出调试的问题。调试就像剔牙一样,它对你很有好处,做起来却相当烦人,如果做得不好,或者最坏的情况下,可能会有严重的影响。这是一个非常不讨喜的任务,除非是研究助理和合作者,或者其他正在某人的代码中寻找错误的人,否则没有多少人愿意帮你去做。关于编码错误,不好的事情是许多情况下,它不会产生明显的红旗(red flags),因此很难被捕获。(译者注:如果代码直接运行不下去,在Stata的输出窗口会直接出现红色的错误提醒。但有时候代码顺利运行完了, 只是得到的是错误的结果。 ) 根据我们的经验,第一种最好的办法是让两个不同的人写不同的脚本执行同样的任务,然后比较他们的结果。如果他们的结果是一样的,那么他们要么都是对的,要么都犯了同样的错误;后一种结果的可能性很小。当然,让两个人从头开始编写执行相同任务的代码,是不太可能实现的。 还有两种替代选择。次优的办法是请人审查代码。再次优的办法是在一段时间后自己审查代码。哪怕是一两天的时间,也会在发现编码错误方面有很大的不同。如果你这样做,你就会惊讶地发现有好几次你会怀疑自己:“这真的是我写的吗?” 五、分析 此时,您已经对数据进行了处理,并准备好以稳健的识别方法对它们进行分析,回答有难度的和政策相关的问题。我们将Analysis(分析)文件夹作为一个项目的核心实证工作的存储库。如上所述,我们建议您为每种分析类型使用不同的子文件夹。例如:描述性统计、简化型(reduced-form)分析、反事实、稳健性检验。我们倾向于使用表1中的文件夹结构来处理它们。下面我们提供了创建表格和图表的建议和技巧,你做任何类型的分析都肯定会需要。 5.1 使用Excel和LaTeX的表格和图表 如果您喜欢Excel而非Stata生成的图形和表格的格式,您可以使用Stata准备这些图形和表格中使用的数据,然后使用export excel
将汇总(tabulations)、描述性统计、估计结果(如最大似然回归等)等导出到Excel。一旦您将数据导出到Excel,您可以根据自己的喜好对图形或表格进行格式化,然后使用SAVE-AS-PDF选项创建PDF文件。如果你需要多次重复这个过程,或者为了简化更新过程,你可以编写一个简单的Excel宏,复制SAVE-AS-PDF过程。然而,到目前为止,Stata不允许导出支持宏的Excel文件,但有一种方法可以解决这个问题,我们在下面的例子中将对此进行描述。 一旦您生成了一个与表格/图形相关联的PDF文件,您可以使用includegraphics
将其导入LaTeX文档中,它允许你裁剪、消除不必要的空白处并调整表格/图形的图像大小。当然,您不能编辑字体、坐标轴的标签、标题等,因为底层的文件是一个图像文件。按照这些步骤,您已经完全自动完成了一个冗长而且经常是重复的流程。这个过程也不会出现“复制和粘贴”的错误,因为它避免了手工移动数值。此外,在LaTeX中创建和格式化表格是非常耗时的。通过我们刚刚描述的过程,您可以在Excel中完成所有表格的格式设置,这比在LaTeX中做要容易得多。 准备一个支持宏的Excel文件(.XLSM),并将其链接到XLSX文件--到目前为止,Stata还不能导出到支持宏的Excel文件。您将您的数据导出到XLSX文件中,该文件将自动更新链接到XLSM文件。
在XLSM文件中创建两个标签(tabs)。在XLSM文件中使用第一个标签链接到xlsx文件中的数据,我们称其为数据。使用第二个标签(例如TABLE),创建一个格式化的表格,它的条目(entries)链接到数据标签的单元格。
在XLSM文件中创建一个宏,将TABLE标签保存为PDF文件。如果您不想或不需要使用自动化过程来创建表格的PDF版本,则不需要创建XLSM文件,而可以简单地使用单个XLSX文件。
一旦你这样做,每次你在Stata中生成新的数据,并将它们导出到Excel中,你的TABLE标签中的表格就会更新。你也可以创建另一个标签(例如FIGURE),也会生成一个自动更新的表格。你可以用相同的方法与Stata中的outreg2
指令结合使用,保存带有回归估计结果表的XML文件。Stata加载项(add-ins)也提供了执行类似任务的其他命令。 这里有一个技巧,若你在Excel中使用自定义格式“[‘0.000’]”,单元格中的数字将会用方括号保留三位小数,你可以用它来表示估计结果表中的p值。同样,您可以用“(‘0.000’)”将带有三位小数点的数字括起来,用来表示标准差。Excel中的LM Roman OTF系列字体生成的字体与LaTeX中CMR系列字体几乎无区别。但是,这些字体不能与Excel中的SAVE-AS-PDF选项一起使用,因此也不能与任何实现该选项的宏一起使用。⁹ 5.2 Stata的图形 Stata大大改进了它的图形功能,所以你可以跳过在Excel中绘制图形的步骤,直接在Stata中操作。花点时间用你喜欢的格式选项创建一些基本图形的模板代码,这样你就可以用最少的调整来重复使用它,如轴的标题(axes titles)和标签(label)、标题(captions)、绘图区域(plot regions)等。要对于你在图中放入的信息量要有印象,避免混杂图表(clutterplots)。¹⁰ (关于如何避免重大陷阱,参见Schwabish(2014)) 当你处在探索数据的阶段时,你会想要在多个图表中看到你的数据。编写循环可以生成大量图表,如散点图和时间序列图,这样有助于你熟悉数据。例如,你可以在Stata中编写一个循环,将图表保存为PNG格式,将其保存在一个文件夹中,然后像浏览照片一样在几秒钟内浏览他们。或者将图表保存为PDF格式,在几秒钟内将它们导入LaTeX文档中。一旦导入到LaTeX文档中,它们也会随着变化自动更新。在同一文档中,您可以在图表下标明注释,这样不仅可以更好地理解您的数据,还能快速唤起你对这组数据的初步印象。¹¹ 5.3 Excel中的数据透视表和图表 如果你更喜欢Excel的图表,数据透视表和图表这两个工具提供了一种非常方便的方法,可以使用各种过滤器以多种方式对数据进行切分。这也意味着你必须非常小心。从本质上讲,这个功能允许通过一次点击和拖动在表格/图表中添加/删除变量,改变数据的轴或图表类型等。数据透视表的快捷键是ALT->D->P
;一旦选择要在数据透视表中使用的数据,你的数据透视表就准备好了。如果你试图在数据透视表中创建一个图表(chart),你实际上就是在创建一个数据透视图(pivot chart)。 数据透视表的一个非常强大的功能就是计算字段(the calculated field)。举一个非常简单的例子(可能无法准确地描述该功能),你可以用总收益除以数量来计算价格。使用数据透视表,你可以执行一些简单的任务,如计算横截面或者时间维度上的(如按城市和年份计算的,或者分州分年计算,或者分州、分年计算的)市场份额或者价格。 六、交流 我们使用一个Input(收件箱)文件夹和一个Output(发件箱)文件夹来保存电子邮件。通常情况下你会去联系与你的实证研究主题相关的“权威人士”,这类主题的例子包括数据收集方法、行业背景、监管发展。很多时候,这些人在回复你的邮件时都会帮到你的忙,所以别忘了发一封感谢信。 这里还有一个有用的提示。许多数据订阅服务都带有电子邮件新闻提醒。例如,我们对SNL Energy的订阅包括有关美国电力行业监管发展的电子邮件提醒。假设你使用我们许多人都在使用的Outlook,可以设置成将您的数据订阅服务的电子邮件收到您的收件箱中的特定位置。您可以用VBA脚本¹²定期将Outlook文件或其附件导出到您的收件箱文件夹,然后您可以在论文中引用这些通信(如2015年5月15日与John Doe的电子邮件),或者干脆将它们保留下来,以备记录之用。同时,你也能在工作中认识到各种各样的人,这是一件不错的事情。 七、文献 我们使用Literature(文献)文件夹来收集我们看过的所有论文以及将在文章中引用的论文。为了减少风险,我们建议您将论文保存为PDF格式,并使用约定的方式命名文件。我们首选的是:author_source_year.pdf
。例如,Someone_and_Other_ReStat_2014.pdf
。对于两个以上的作者,我们建议使用et al,如Someone_et_al_AER_1999.pdf
。 学习如何将BibTeX用于LaTeX也很有用,它提供了一种非常方便的方式来组织你的参考文献。最重要的是,省去了你在格式化参考文献部分的麻烦。此外,许多可以访问学术期刊的数据库(如JSTOR)允许你下载你所访问的文章的BibTeX条目。一个名为JabRef
的基于Java的应用程序允许你在电子表格中打开、编辑和保存BibTeX文件。它使用起来非常简单,而且是免费的。BibTex文件使您能够将key分配给各种引用(cites),随后你可以在LaTeX中通过citet
命令非常方便地使用。您应该与合作者就BibTex key的命名做一个一致的约定;大多数时候,Aaayyyy
, AaaBbbbyyyy
,和 Aaaetalyyyy
等约定能产生足够多的key,这样即使你要建立一个有几百个参考文献的主数据库,也不会出现重叠。例如,你可以用Som2012
作为Someone(2012)的key,SomOth2014
作为Someone and Other(2014),Sometal1999
作为Someone et al.(1999)的key。尽早建立这些惯例,特别是在与他人合作时,可以节省很多时间。 作为替代,我们发现可以很容易地用Python¹³创建一个含有三列的电子表格:文件名、文件链接、注释(notes),比如Index.xlsx
。即使你不懂Python,Excel中的hyperlink(超链接)功能非常容易地创建这样的电子表格。在注释这一栏中,你可以有一个非常简短的关于论文的说明。使用点数系统(point system)和主题(topic)(如Cap and Trade)表明论文相关性的附加列会有助于去回顾这篇论文。一些同事和学生会使用管理参考资料的软件,如Mendeley或Zotero(译者注:国内开发的软件见Noteexpress),它们可以让你以非常有效的方式组织网络搜索。当你最初收集材料时,这些都是相当有用的事情,一旦你习惯于创建它们,就无需花费太多时间并且能保持井井有条。 八、背景和笔记 我们使用Background文件夹保存与行业背景,法律等相关的材料。与Literature文件夹一样,建议创建一个Index.xlsx
文件,其中包含指向PDF文件的链接并简要说明每个文件的内容。 使用Notes(笔记)文件夹保留您正在查看材料的笔记以及有关在进行分析时得出结论的笔记。并非所有分析都会发表在最终的研究论文中,因此保留所尝试内容的痕迹以及最终放弃的原因是非常有用的。如果需要回忆起事实,结论或问题,保留一个关于这些笔记的日志文件(log file)会很容易进行检索。 九、草稿 正如我们前面提到的,我们更喜欢用LaTeX写论文。首先,它提供了高质量的专业排版,并且允许把任何需要在数学模式下的东西用$符号括起来,就可以非常轻松地从文本模式切换到数学模式,例如, $y=a+bx$将生成 。每个LaTeX文件的一个明显特征是它的序(preamble),可以允许用几个软件包来增强其功能。 下面是你可以很轻松地使用LaTeX做的一些事情: 任何以%开头的内容均为注释。这对于.tex
文件(正在编写的LaTeX文件)中添加注释非常有用,并且这些注释不会出现在最终的文档中; 使用section{}
,subsection{}
,等创建小节; 使用includegraphics[]{}
导入和编辑图形; 使用来自soul
包的hl{}
高亮文本,这有助于编辑文本。 版本控制是一种很好的平衡行为,一种方式是在文件名中添加后缀来表示版本,例如v01,v02等。正如我们之前提到的,因为写作是一个非常可怕的任务,而tex文件的大小可以忽略不计,因此我们更倾向于存档而不是删除。你可以使用Archive文件夹来进行组织。我们还大量使用LaTeX的注释功能,包括链接到包含特定分析的文件夹,或者在编辑草稿时提出的建议。 最后的建议是,尽可能给方程式编号,即使是初稿,也要给表格和图形加上标题。通过引用方程式(10)而不是“第10页中间的方程”来表示编辑内容要容易得多,尤其是当同一页面上有多个方程时。在重新开始编辑草稿之前,特别是将草稿交给以前从未看过的人之前,先等几天。此外,在你的办公桌上准备第二个屏幕、键盘和鼠标。这样与旁边的人一起编辑草稿会非常有效。如果您与人一起通过远程工作,在编辑草稿时使用Skype中的共享屏幕功能也会非常有帮助。(译者注:现在有很多应用,包括文本编辑软件都开始支持协同编辑文档,比如飞书上的文本编辑 )当你编辑时,请在桌上放一本著名的《芝加哥风格手册(Chicago Manual of Style )》。它涵盖了从稿件准备和出版到语法、用法和文档的各种主题,当然,你也可以在网上查阅这本书。¹⁴ 十、结论 做了超过15年的实证研究,我们认为有必要写下这套方法,以帮助我们有效且透明地开展工作。这套方法不是独一无二的,也不是全面的,但多年来它对我和许多同事来说都很有用。它们应该被看作是一组关于如何有效访问、处理、组织和分析数据的建议。我们希望在学术界和学术界以外就业的年轻经济学人都能从中获益。 参考文献: [1] Ball, R., and N. Medeiros. 2012. “Teaching Integrity in Empirical Research: A Protocol for Documenting Data Management and Analysis.” The Jounral of Economic Education 43(2): 182–189.
[2] Cameron, A., and P. Trivedi. 2005. Microeconometrics Methods and Applications. Cambridge: University Press.
[3] Gentzkow, M., and J. Shapiro. 2014. “Code and Data for the Social Sciences: A Practitioner’s Guide.” Working paper, Chicago Booth and NBER.
[4] Schwabish, J. 2014. “An Economist’s Guide to Visualizing Data.” Journal of Economic Perspectives 28(1): 209–234.
[5] Wooldridge, J. 2013. Introductory Econometrics: A Modern Approach. 5th ed. South-Western, Cengage Learning.
注: ¹ 另请参考Gentzkow和Shapiro所著的Practitioner’Guide《从业者指南》(2014),其中也涉及到许多这里讨论的主题。Ball和Medeiros(2012)提供了有关记录数据管理和分析的报告。
² 例如,使用http://www.eia.gov/electricity/monthly/archive/pdf/02261001.pdf,“MER-2010-01.pdf”,用户可以获取美国能源信息署(EIA)1月版《能源月报》(MER)的PDF文档,并将其存储为MER-2006-01.pdf。同样,使用http://www.eia.gov/electricity/monthly/archive/pdf/02261002.pdf,“MER-2010-02.pdf”,可以获取美国能源信息署(EIA)2月版《能源月报》(MER)的PDF文档。Python也有类似的功能。Perl和Python在网络上均拥有庞大的用户群体以及大量可免费获得的数据。
³ 例如由Kit Baum维护的统计软件组件文档,网址为http://fmwww.bc.edu/RePEc/bocode/。
⁴ 请参见https://www.r-project.org/和http://www.mathworks.com/matlabcentral/fileexchange/。
⁵ 如用Perl,请参见http://search.cpan.org/dist/CAM-PDF/。如用Python,请参见https://pypi.python.org/pypi/pdfminer/。
⁶ 例如,http://www.ntg.nl/doc/biemesderfer/ltxcrib.pdf的文件中包含了 LaTeX 命令的摘要列表。
⁷ Overleaf是一个在线LaTeX平台,它允许实时协作和完全排版输出。其Pro和Pro+版本能够与Dropbox结合在一起。
⁸ https://ideas.repec.org/c/boc/bocode/s457879.html.
⁹ 我们建议读者熟悉Adobe Acrobat的“导出选择”(Export Selection As)功能,该功能允许用户从PDF文件中导出Excel或CSV文件中的表格。我们已经大量使用这种方法从各种EIA出版物中获取表格。同样这种方法也可以用来提取数据。另请参见Keith Head的10 commandments for Regression Tables (http://blogs.ubc.ca/khead/research/research-advice/regression-tables )来获得一些有用的提示。(译者注:原链接已经失效,括弧中是新链接。)
¹⁰ 我们学习了如何在Stata中制作图表,并列出来许多例子,详见http://www.ats.ucla.edu/stat/stata/library/GraphExamples/。另请参见Keith Head的10条建议(链接同上)来获得一些有用的提示。
¹¹ 如今,地图的使用是非常普遍的,特别是对于那些从事经验研究领域的人来说,如农业经济、发展、贸易和能源等。虽然使用spmap命令可以在Stata中创建地图,但由于Stata本身并不是一个制图软件,所以最终的地图不如Tableau、Cartodb或Mapbox等程序生成的地图精美。因此,ESRI ArcGIS被许多人认为是制图方面的黄金标准。
¹² 关于如何导出附件的例子, see http://www.rondebruin.nl/win/s1/outlook/saveatt.htm。
¹³ https://docs.python.org/2/library/os.html.
¹⁴ http://www.chicagomanualofstyle.org/home.html.