👇 连享会 · 推文导航 | www.lianxh.cn
连享会:2026暑期初级班 · 线上时间:7月21-23日嘉宾:连玉君(中山大学)咨询:王老师 18903405450(微信)

初级班是一个适合小白科研入门 的课程,课程会带着大家完整的走一遍实证研究设计的流程,以及如何在这个过程中用AI来辅助学习。
尽管AI让写代码的门槛降低了,但是我们仍然要懂一些软件,因为我们得会判断AI做的对不对 ,这一步很关键。初级班的重点不是讲怎么用AI,而是实证研究如何做起来,AI在这个过程中只是辅助作用。
公开课,扫码进群即可参加


温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:

作者:李青塬 (广东工业大学)邮箱:qingyuanli95@gmail.com
编者按:本文主要摘译自下文,特此致谢!Source:Asjad Naqvi, Blog, The Stata workflow guide, Jun 7, 2021. -Link-, -PDF-
1. 引言
在使用 Stata 或其他编程语言时,我们很容易忘记文件和文件夹的位置。大多数情况下,是在完成论文或提交论文时,我们才想起来创建文件夹。并且当论文需要进行修改时,我们会再次搜寻这些文档。所以,工作流管理非常重要。组织文档应该是首先要做的事情,否则会浪费很多时间来弄清楚到底做了什么、文件所放的位置、以及最新代码的保存地方。通过本工作流程指南,当你打开一个旧项目时,可以迅速找到所需文件的位置。
在本文中,作者介绍了文件、数据和 dofiles 的工作流管理。这些工作流程技巧可以扩展到任何软件中的任何项目。诚然,这些都不是金科玉律,而是围绕研究工作、数据管理和分析的一份指南。
2. 文件夹设置
在进行研究项目的全生命周期过程中,会不断积累文件。在分析部分,包括获取原始数据、处理数据的代码、数据分析、生成表格和图形。在写作部分,包括项目文档、文献文件夹以及 Word 或 LaTeX 文件及其版本。所有这些文件都应该在文件夹中排序。如果你遵循作者的这份指南,可按照以下排序结构:

这里的文件名如下:
raw:包含所有原始文件;dofiles:包含处理、清理和分析原始文件的所有代码;temp:包含从原始数据生成的临时文件;master:包含准备分析的最终数据;GIS:包含空间数据;graphs:包含图片表格等。
虽然此列表并不详尽,但可以帮助你迈出第一步。此外,还可以根据项目大小而做具体设定,例如小项目 (单篇论文) 和大项目 (多篇论文)。
2.1 小项目
对于小型项目或单篇论文,作者建议使用如下所示的文件夹结构:

可以在文件夹前添加数字前缀进行名称排序。另外,如果其他研究者使用此文件夹,他们也可以按照工作流程的逻辑顺序进行排序。如果你曾经下载了一些待复现的代码,并且文件夹是按字母顺序排列的,那可能会令人困惑,因为它们与实际工作顺序不对应。
需要注意的是,文件夹或文件名中不要有空格。虽然操作系统可以处理它们,但有的系统可能会报错。同样,应尽力避免使用 ~#@!\%^&- 等字符。这些字符大部分用于编程,通常不宜作为文件名。同时切勿在文件夹或文件名中使用连字符 (-)。
如果你需要使用空格,请使用下划线 (_)。从技术上讲,如果名称用双引号 "" ,Stata 可以读取带有空格的名称。但通常,无论是文件夹名称还是文件名称,最好都使用下划线。
避免在名称中使用大写字母。大写字母也会影响代码和编程执行的速度。即使在变量名称中有大写字母,最好也将它们转换为小写。变量和值标签也应该保留小写形式。
2.2 大项目
如果你正在处理涉及多个数据集、多篇论文等大型项目,可以将数据初步清洗与数据分析部分分开。对于大型项目,可以使用这种类型的文件夹结构:

这里的 Data 文件夹只是原始数据和清理原始文件的代码。目的是生成初步的数据文件。这种文件夹结构适用于多个项目。例如,一个项目有相当大的空间数据文件,再与微观人口普查数据合并。数据大小为几个 G,处理过程可能需要几个小时,甚至一个晚上。数据文件夹中代码的目的是在进行各种空间数据及微观数据合并、清理、处理等之后,将所有内容放在一起。
需要注意的是,丢弃论文不需要的变量,因为每个未使用的数据都是内存的负担。加载到数据集中的无用变量会占用内存,如果文件很大,你的计算机将会很累。此外,这样操作也有助于数据分析部分,不必浏览一大堆无关变量。
编写一个 readme.txt 文件有很大帮助!例如,它们包括相关文件夹和文件的使用顺序。更重要的是,它们还包含有关在何处以及如何访问数据的信息。在这里,建议在你的 dofile 中留下可以找到原始文件的 URL 注释。没有记录就没有发生。有时,我们打开了一些旧项目,却不知道从哪里更新数据。这在数据清理过程中似乎不困难,但后来就忘记了。
3. 文件命名
你可以在上面的截图中看到,dofile 以数字为前缀,并以版本号为后缀。同样,按顺序对所有内容进行排序的逻辑也适用于此。将数字前缀到 dofile 有助于对它们进行分类并使之与工作流程一致。同样,带有版本号的修改文件也可以帮助你跟踪。在这里你可以看到作者使用 v1、v2 等,当然也可以用日期表示。
需要注意的是,使用日期时遵循 yymmdd (年月日) 格式。这将自动以正确的顺序对文件进行排序,最新的文件首先显示。在这里作者重申避免使用 ddmmyy (日月年) 格式或 mmddyy (月日年) 格式。此处的目的是使文件以正确的顺序排列
隐藏或删除旧文件版本。不要在同一个文件夹中放许多版本。在某些时候,旧版本将是多余的或无用的,删除它们。或者,如果你是收藏家,请将它们放入临时文件夹中。尽可能保持主文件夹和子文件夹整洁。所以如果你在一个项目上工作了几个月,那么偶尔做一些大扫除。
命名设定不应仅限于 dofile。对所有的图表、表格、纸质版本等都这样做。一开始进行尝试时,可能感觉很痛苦,但照此完成后,你不会后悔的。因为你不必通过筛选数百个图表来找到真正需要的图表。
4. dofile 逻辑化
dofiles 的创建应该有一定的逻辑顺序。作者使用以下结构:
01_setup_v4.do 02_merge_v2.do 03_tables_v11.do 04_regressions_v15.do 05_figures_v2.do 06_master_v1.do这些 dofiles 的命名也是通俗易懂的。第一个 dofile 是处理原始数据,将其清理并转存到临时文件夹中。还可以设置不同的版本。例如,可以有:
01_setup_emissions_v1.do 01_setup_economic_v4.do由于以 01 为前缀,它们将在文件夹中率先聚集在一起。第二个文件 02_merge 获取所有数据集并将它们放在一起以创建核心文件。到目前为止,一切都是数据清理。除非你非常幸运并且拥有一组非常干净的文件,否则将会占用很多时间用于处理数据。你也可以使用日期进行版本控制,但请记住遵守 “年月日” 规则。一些作者还喜欢对不同的表格和图形等使用不同的 dofile,这是没问题的。重要的是文件名的标记应该反映对应图形或表格编号。例如:
03_table1_v1.do 03_table2_v4.do 04_regression1_v2.do 04_regression2_v6.do在项目开始时,表格的顺序通常是不明确的。在项目结束时,表格的输出顺序才能最终确定。
4.1 启动项目
项目的初始阶段通常是混乱的,dofiles 通常也是混乱的。例如,早期阶段的工作流程可能如下所示:导入数据 > 生成一些变量 > 进行绘图 > 生成更多变量 > 更多数字/表格 > 修改一些数据 > 做一些复杂的循环来生成回归。在这里,作者建议做两件事:
在同一个 dofile 中对代码进行分区:如果你从同一个 dofile 生成不同的图形/表格,请将其注释,以便以后可以将其拆分为不同代码块。或将其拆分为不同的 dofile。
将变量生成部分放到 dofile 中的前面部分:理想情况下,所有文件所需的核心变量都应该放在 dofile 中的前面部分。或者,如果你从不同的文件生成变量,它们也可以先分别进行变量生成,再进入 merge.do 文件。
4.2 核心 dofile
master.do 的目的是串联项目的所有内容。它的结构如下所示:
**** <some project info here> ****clear<some directory setting stuff here><some paths to folders. usually defined as globals><other macros for tables/regressions here>// run all the dofiles\do ./dofiles/01_setup_v11.dodo ./dofiles/02_merge_v2.dodo ./dofiles/03_tables_v4.dodo ./dofiles/04_regressions_v5.dodo ./dofiles/05_figures_v2.do*** END OF FILE ***为了能一次性运行所有代码而不会破坏数据。使用下文的相对路径很重要。
5. 相对路径
相对路径是工作流程顺利进行的关键。你应该设置一次主目录,后续文件夹结构都与该目录相关。让我们回到前面所示的文件夹结构:

假设主文件夹名为 myproject,它位于你的 D 盘。我们可以在 dofile 中将路径设置到这个文件夹,如下:
clearcd "D:/myproject"请注意,这里使用 clear,它会清除内存中的所有内容。然后改变工作路径,注意使用正斜杠 /。
在不同系统中,正反斜杠具有不同的作用。有时使用反斜杠可以运行,但不要使用它!文件夹名称如果没有空格或其他字符,不需要双引号。但是,文件路径用双引号引起来,则无关紧要。在这里,另一种情况也很常见。假设你在坚果云上同步了你的文件,并且你在多台计算机上同步工作 (例如,家里或者办公室)。大概率文件路径在不同计算机之间会有差异。一个非常简单的技巧就是使用 Stata 的 capture 命令:
clearcap cd "C:/Program files/Dropbox/myproject" // home cap cd "D:/Program files (x86)/Dropbox/myproject" // officecapture 或 cap 命令可以跳过 Stata 错误并移至下一行。如果没有 cap,Stata 只会在屏幕上显示红色错误代码并停止代码。这使得 cap 成为一个非常危险的命令,应该谨慎使用,尤其是在进行分析时。
在上面的代码中,告诉 Stata 看它是否找到了第一个路径,如果没有,那么它应该移动到下一行并尝试设置路径。如果你已正确设置它们,则两者中的任何一个都必须正确。特别地,如果你正在与其他人进行合作,例如在坚果云或在其他云平台上,那么你可以继续添加许多的 cap 和 cd 选项。但要注意在行尾使用 // 来注释代码。
这里 // 特别有用,因为它们允许你在编写代码后进行注释。例如:
*** here is my first regressionreg y x1 x2 x3 // some comment here回到相对路径,如果上面的代码运行正确,当前路径应该在 myproject 目录中。可以通过相对路径访问子目录。例如,如果你在 raw 文件夹中有一个数据文件 rawdata.xls。可以这样读入数据:
import excel using ./raw/rawdata.xls, clear first更复杂的做法是:
import excel using "C:/Program files/Dropbox/myproject/raw/rawdata.xls", clear first如果你同时在几台计算机上工作,使用这种做法则必须在此处或后续工作中多次更改路径。另外,由于文件夹名称中有空格,因此所有内容用双引号引起来。同样,一旦完成清理部分的 dofile,你就可以使用相对路径将其保存在 temp 文件夹中:
import excel using ./raw/rawdata.xls, clear first<some data cleaning stuff>order var1 var2 x* y*sort var1 var2compresssave ./temp/rawdata.dta, replace在数据处理的中间部分,我们生成变量、清理它们、查找异常值、标记它们、标记值等,这是大多数人首先学习的内容。因此,让我们回到完成数据清理后的最后一部分。
第一步,使用 order 对变量进行排序。例如,如果你有一个数据,其中包含 countryid、countryname、provinceid、provincename、districtid、districtname、year、month 等变量,那么也要在数据集中对这些变量进行排序。你也可以按字母顺序对变量进行排序:
order ctryid ctryname distid distname year q1* q2*order 命令中未指定的变量名会移动到经过排序的变量名之后。对于 order 命令的使用,建议遵循一些逻辑顺序,例如从最高单位到最低单位 (通常是唯一的行标识符),反之亦然。
接下来对数据进行排序。这会使在浏览器窗口 (br) 中查看和观察数据变得更加容易。在早期的 Stata 版本中,排序对于合并是必不可少的,但现在不必如此。例如,如果你有一个面板数据集,其中包含 id 变量和 time 变量,则需对 id time 进行排序。如果你指定了一些顺序,那么你也可以按照该顺序从最高到最低进行排序。这一步并不是真正必要的,但它有助于保持数据集整洁。
下一个命令 compress 检查数据是否可以更有效地存储。例如,文本变量可能会以更大的字符长度存储 (将数据导入 Stata 时的典型问题)。或者数字可以更有效地存储为浮点数和双精度数等。compress 命令可以自动检查它是否可以压缩变量的内存。如果你有一个非常大的数据集,这也有助于节省硬盘空间。
最后一步,使用临时文件夹。可以使用 ./temp/ 这一相对路径进行保存文件。这里使用与原始文件相同的名称。这也不是必需的,但是如果你要清理数十个文件,你要做的最后一件事就是找出哪个文件保存为哪个文件。如果你可以将中间文件追溯到原始数据文件,这通常会很好,尤其是当你使用一些循环生成数十个中间文件时。对于一两个原始文件,这并不是真正必要的,但最好使用这些!
5.1 路径移动
现在让我们探索将当前路径更改为子文件夹的场景。例如,你可能希望切换到 GIS 目录以简化处理地图文件的工作。但这适用于任何子文件夹。可以通过两种方式更改到 Stata 中的子目录。路径中一个点通常表示当前目录,两个点表示当前目录的上一级目录。
clearcd "C:/Program files/Dropbox/myproject/GIS"或使用相对路径:
clearcd "C:/Program files/Dropbox/myproject/"cd ./GIS进入 GIS 文件夹后,你可以进行处理地图文件。假设你要生成地图并将其保存在 graphs 文件夹中,该文件夹向上一个目录,然后又向下一个目录。同样,我们可以在这里使用相对路径:
clear cd "C:/Program files/Dropbox/myproject/"cd ./GIS <some shapefile processing here>spmap <commands> graph export ../graphs/map1.png, replace请注意,要访问图形文件夹,我们使用两个点 ..,这意味着在图形文件夹中上移一个目录,然后下移一个目录。 可以使用类似的逻辑来导航目录树。假设你在 GIS 内的另一个目录中,例如 country1。图形文件夹的相对路径将定义为:
clear cd "C:/Program files/Dropbox/myproject/"cd ./GIS/country1 <some shapefile processing here>spmap <commands> graph export ../../graphs/map1.png, replace这里向上移动两次 ./../ 并向下移动一次 graphs/。使用这种编码是相当复杂的。但是,如果你确实需要在文件夹中移动这么多,那么下一步会有所帮助。
5.2 全局 or 局部
局部暂元在代码运行结束后消失,而全局暂元永久存储在内存中,直到你关闭 Stata。但使用全局暂元有风险,可能导致意想不到的后果。作者通常会在一开始就使用全局暂元定义关键路径:
clear*** replace this with your main directory pathglobal projectdir "C:/Program files/Dropbox/myproject/"global graphdir "$project/graphs"global tabledir "$project/tables"cd "$projectdir"cd "$graphdir"cd "$tabledir"请注意整个项目路径使用全局暂元,而图形和表格路径是相对路径。因此,在这里你只需要定义 projectdir 为全局暂元,其余为局部暂元。全局暂元用美元符号 $graphdir 调用。当然也可以用局部暂元来完成,但这意味着一切都必须一次性运行,如果想让变量在所有 dofiles 中都可以被定义,推荐使用全局暂元。
确保全局暂元名称不会与数据中的变量名称冲突。尽量保持全局暂元名称的唯一性,以避免代码混乱。带有全局暂元的示例如下所示:
clearglobal projectdir "C:/Program files/Dropbox/myproject/"global graphdir "$project/graphs"global tabledir "$project/tables"cd "$projectdir/GIS"<some shapefile processing here>spmap <commands>graph export "$graphdir/map1.png", replace这对于主数据集全部存储在其他地方的大型项目也非常有用。例如,可以将非常大的文件放在固态硬盘上,并将代码、数据子集、表格和图表留在云平台上。因此,全局暂元帮助我们非常有效地运行项目的完全独立的部分。如果你用完整路径替换全局暂元或相对路径,可想而知,它会变得非常混乱!为了完整起见,如果我们用局部暂元替换全局暂元,它们将如下所示:
clearlocal projectdir "C:/Program files/Dropbox/myproject/"cd "`projectdir'"6. 代码风格
6.1 三种注释
Stata 有三种方式进行注释:
* 在单独的行上进行注释// 在单独的行上和在一些代码之后进行注释/* 用于标记代码块 */尽可能多地使用这些注释。** 可以用来塑造你的代码风格。例如,可以使用它来启动带有注释和注释的 dofile:
************************** ****** The Stata Guide ****** Tutorials ****** **************************或者对数据进行分区:
*************************** COVID 19 data ***************************insheet using "https://covid.ourworldindata.org/data/owid-covid-data.csv", cleargen date2 = date(date, "YMD")format date2 %tdDD-Mon-yydrop dateren date2 datesave "./data/OWID_data.dta", replace************************************* Country classifications *************************************copy "https://github.com/asjadnaqvi/COVID19-Stata-Tutorials/blob/master/master/country_codes.dta?raw=true" "./data/country_codes.dta", replace这只是使它看起来更整洁,更容易寻找。*也可用于标记单独的代码行:
*spshape2dta "wien_building.shp", replace saving(wien_building)*spshape2dta "wien_leisure.shp" , replace saving(wien_leisure)*spshape2dta "wien_roads.shp" , replace saving(wien_roads)*spshape2dta "wien_water.shp" , replace saving(wien_water)*spshape2dta "wien_railway.shp" , replace saving(wien_railway)在这里,我们不需要每次都生成 shapefile,因为这是一个一次性的过程。但是我们仍然将代码保留在 dofile 中并标记出来。有时,还可以在 dofiles 中指定需要安装的包并将它们标记出来:
** this dofile needs these packages*ssc install geo2xy, replace*ssc install palettes, replace也可以一次性标记出第一个代码块,如下所示:
/*spshape2dta "wien_building.shp", replace saving(wien_building)spshape2dta "wien_leisure.shp" , replace saving(wien_leisure)spshape2dta "wien_roads.shp" , replace saving(wien_roads)spshape2dta "wien_water.shp" , replace saving(wien_water)spshape2dta "wien_railway.shp" , replace saving(wien_railway)*/如果你的 dofile 中有测试代码,然后适用于某些循环或其他大型代码,这将特别有用。两个正斜杠可用于向 dofile 添加注释:
* Raw file downloaded from* https://datahelpdesk.worldbank.org/knowledgebase/articles/906519gen region = .replace region = 1 if group29==1 // North Americareplace region = 2 if group20==1 // Latin America and Caribbeanreplace region = 3 if group10==1 // EUreplace region = 4 if group26==1 // MENAreplace region = 5 if group37==1 // Sub-saharan Africareplace region = 6 if group35==1 // South Asiareplace region = 7 if group6 ==1 // East Asia and Pacific在这里,可以用 * 表示原始文件的来源,并用 // 来注释国家名称。否则没有人知道这些数字是什么意思。
6.2 跨行拆码
使用三个正斜杠 /// 可以跨行拆分代码。在绘图中非常有帮助。例如,下面这行绘图代码看起来就很杂乱:
twoway (connected y1 x1, msize(vsmall))(connected y2 x2, msize(vsmall)), aspect(1) xlabel(-1(0.5)1) ylabel(-1(0.5)1) xline(0) yline(0)我们把它分成几行:
twoway (connected y1 x1, msize(vsmall)) /// (connected y2 x2, msize(vsmall)), /// xlabel(-1(0.5)1) ylabel(-1(0.5)1) /// xline(0) yline(0) aspect(1)拆分后,它看起来相当整洁。另一种跨行拆分的方法是使用 delimit 选项,但作者认为不用 delimit 也可,因为/// 相当方便且易于使用。例如,以下这个绘图代码:

这里利用了空格和 ///,并且非常容易阅读。在这里我们可以轻松地修改相似的元素,而不必在长长的一行中去修改它们。
6.3 制表符
制表符 (通常是键盘上 TAB 键) 有助于整齐地分隔代码。这是一个未被充分利用的工具。上面的截图也使用制表符来自动分隔不同的代码行。让我们使用制表符分隔前面显示的代码:
twoway /// (connected y1 x1, msize(vsmall)) /// (connected y2 x2, msize(vsmall)) /// , /// xlabel(-1(0.5)1) /// ylabel(-1(0.5)1) /// xline(0) /// yline(0) /// aspect(1)7. 连接 dofile
正如前文提到的,一个任务中核心 dofile 应该可以运行所有其他 dofiles。dofile 分为数据管理和数据分析。核心 dofile 本质上是一个很长的代码,可以拆分成不同的 dofiles。在这里,你可以看到作者在 Stata 中完成的 COVID-19 Tracker项目的示例。还可以看到文件编号的使用、相对路径的使用、注释和间距。运行文件和编译图形等所需的所有包也在那里,但被注释掉了。

以下是确保此文件和各个国家/地区文件顺利运行的三个提示:
一是确保每个 dofile 都应该能够独立运行。在任何时候你都不应该让 dofile 依赖于特定的目录路径。许多作者在共享他们的代码时都会这样做。无论这是有意还是无意,处理起来都非常烦人,甚至可能有点令人反感,尤其是对于一些不习惯拆开非常复杂且相互关联的代码的研究人员而言。所以,确保每个 dofile都可以独立运行。
二是让全局暂元在所有 dofiles 中都可用。例如,假设你有一组用于多个回归的控制变量。与其复制粘贴变量,不如定义一个局部暂元或全局暂元并将其传递给回归方程:
global depvars "var1 var2 var3"xtreg y $depvarsxtreg y $depvars, fe这使代码紧凑而整洁,并且还避免了错误。全局暂元还可以跨多个dofile 使用。最好在各个 dofile 中留下关于这些变量存储位置的注释。同时命名在这里也很重要。像以下的命名会让人不知所云:
$depvars1$depvars1_1 $depvars11$depvars2_1如果这些被用于各种循环中,除了运行回归之外,这些循环还执行一系列不同的操作,那么这将只是混乱。在一个流程中,可能不会注意到这些事情。随着代码增多,这可能会很快变得混乱。同样,在查看待复现的代码时,必须 “解包” 代码,糟糕的命名可能会让读者产生很多困惑。因此,请尝试以一种易于遵循可复制性的方式命名全局暂元。或者至少留下一些关于在哪里可以找到它们的注释。例如这段代码:
*** globals for regressions set in the master.do fileforeach x of global depvars {xtreg `x' $indvars1, fextreg `x' $indvars1 $controls1, fextreg `x' $indvars1 $controls1 $controls2, fe}这对于进行大量回归来说相当容易,通常人们会在 dofiles 中找到这种结构,但如果你只看到这段代码而不知道全局暂元是什么,但是又必须找到它们,也会非常混乱。
三是如果你正在运行多个 dofile,请确保当单个 dofile 结束执行时,它始终重置为运行下一个 dofile 所需的目录级别。在上面的截图中,各个国家/地区的 dofile 有时会在特定国家/地区的原始文件夹中进行数据处理,但每个国家/地区的 dofile 在最后都会重置回根目录。
这使我们可以无错误地运行下一个 dofile。如果在某个时候,某些 dofile 有了错误,代码将停止运行,或者有时路径会产生混乱。总之,可以使各个 dofile 依赖于核心 dofile 中定义的参数 (目录、全局暂元等),但每个 dofile 应该能够独立运行。
8. 自动化 workflow
本文依据原作者的文件夹设置,编写出可以按照项目类型不同而自动产生不同文件夹的 Stata 命令 workflow。该命令可以帮助你快速创建本文所示的工作流程文件夹,提高工作效率。语法如下:
workflow working_area(D E or F) working_name(anything) kind(s or m)该命令最多只需输入 3 个参数:创建文件夹的磁盘位置,文件夹名称以及项目类型。working_area:指定特定的计算机区域,如 D 盘或 F 盘。working_name:设置项目的名称,如 happy_stata_one_project。类型:选择项目的类型,小项目或大项目。你也可以省略它。默认设置为小项目。运行该程序后,将在计算机上创建相关的文件夹列表。示例如下:
workflow C happy_stata_one_project s //小项目workflow C happy_stata_multiple_projects m //大项目

9. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 代码规范 AI可以编写 快速查找 dofile模板 私人定制 一份规范 SCons 实证分析文档 lint 优雅的 profile, nocat md, m安装最新版lianxh命令:ssc install lianxh, replace
于凡, 2024, AI可以编写Stata代码吗?, 连享会 No.1348. 吴芳倩, 2021, Stata:dofile模板DIY-速来认领吧, 连享会 No.692. 张弛, 2024, Stata代码规范指南, 连享会 No.1452. 汪京, 2024, Stata代码规范指南, 连享会 No.1377. 游万海, 连玉君, 2019, Stata: 外部命令的搜索、安装与使用, 连享会 No.1. 连享会, 2020, Stata:私人定制-dofile-编辑器模板.md, 连享会 No.400. 连玉君, 2023, Stata编程:快速查找Stata代码片段, 连享会 No.1319. 连玉君, 2025, Stata:如何永久修改我的PERSONAL文件夹的位置?, 连享会 No.1538. 连玉君, 2020, Stata:聊聊 profile.do 文件, 连享会 No.77. 连玉君, 2024, VScode:实用 Markdown 插件推荐, 连享会 No.1390. 连玉君, 2021, 聊聊Stata中的profile文件-第二季, 连享会 No.672. 邹恬华, 2022, Stata论文复现:做一个优雅的码农, 连享会 No.928. 郭盼亭, 2023, Stata:dofile文件规整神器-lint, 连享会 No.1210. 闫天琳, 2021, Stata:线性趋势检验-lintrend, 连享会 No.807. 陆心平, 2022, Stata:如何组织实证分析文档-global-rangestat, 连享会 No.856. 陈卓然, 2023, 可重复研究:基于SCons构造文档结构和可视化图形-statacons, 连享会 No.1307. 马雨驰, 2023, 如何整理一份规范的论文复现文档?, 连享会 No.1180.
🍓 连享会 · 2026 社会网络分析专题嘉宾:杨张博 (西安交通大学)时间:2026 年 8 月 18-19 日咨询:王老师 18903405450(微信)

连享会微信小店上线啦!
Note:扫一扫进入“连享会微信小店”,你想学的课程在这里······


New! Stata 搜索神器:
lianxh和songblGIF 动图介绍搜: 推文、数据分享、期刊论文、重现代码 ……👉 安装:. ssc install lianxh. ssc install songbl👉 使用:. lianxh DID 倍分法. songbl all

🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下:连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。

夜雨聆风