专栏名称: 连享会
连玉君老师团队分享,主页:lianxh.cn。白话计量,代码实操;学术路上,与君同行。
目录
相关文章推荐
成都本地宝  ·  成都市中心新地标+1!最新进展→ ·  昨天  
清廉蓉城  ·  中国纪检监察报关注成都:居有所安 ·  2 天前  
成都本地宝  ·  太美了!成都10个赏梅花好去处!大部分免费! ·  3 天前  
成都本地宝  ·  成都能待一整天的6个室内场馆!部分免费! ·  4 天前  
成都本地宝  ·  正式命名!四川再添一座机场! ·  5 天前  
51好读  ›  专栏  ›  连享会

妙招:Stata 实用小技巧大全

连享会  · 公众号  ·  · 2025-02-20 22:00

正文

👇 连享会 · 推文导航 | www.lianxh.cn

图片
图片

作者: 杨涵慧(北京第二外国语学院)
邮箱: [email protected]

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

Source: 本文编译自如下博文,特此致谢!
Naqvi, A., 2022, Blog, The awesome Stata Tips collection, Link

Stata 中隐藏着许多功能、快捷键和命令,就像是等待挖掘的宝藏,能极大地提升用户体验,给我们带来使用上的愉悦!

虽然这篇文章不能涵盖所有内容,但绝对包含了一些非常有趣的东西!

有些技巧可能只适用于更新版本,所以如果你使用较旧版本,请检查兼容性问题。

1. 用户界面自定义

Stata 本身可以在默认设置之外进行相当多的自定义。

1.1 深色模式

深色模式可能需要一些时间来适应,但它减少了你接触到的蓝光,对眼睛更加友好。设置方法如下:

  • 依次在 Stata 主界面点击: 编辑 (Edit) 首选项 (Preference) 常规首选项 (E) 整体方案 深色

1.2 历史记录

如果想再次执行此前已经执行过的命令,我们无需再次输入这些代码,只需将光标停留在命令窗口中,然后点击 PageUp PageDown 即可再现这些命令。找到需要执行的命令后,按 回车 (Enter) 键即可执行之。

你也可以在命令窗口中输入 #review 10 ,以便将最近执行过的 10 条命令列示在结果窗口中,进而将其复制到 dofile 中,或命令窗口中加以执行。

事实上, PageUp PageDown 不仅适用于 Stata 的命令窗口,在其他窗口,如结果窗口、帮助文件窗口都可以使用。

1.3 内存优先级设置

你可以通过相应的设置来控制 Stata 在运行时分配内存的方式。

set niceness 5 // 默认设置

0 表示分配保守一些,10 代表慷慨一些

1.4 运行多个 stata 会话

只需右键单击 Stata 图标,然后单击 Stata 图标,会弹出第二个 Stata,您也可以打开第三个或第四个实例。只要你的内存能够支持运行,你可以同时打开几十甚至上百个 Stata 窗口,让他们并行运算。

1.5 图片选项卡

如果你想制作多个图表并希望它们保持在屏幕上,记得给它们命名,这样可以确保它们都保持打开状态。

如果不给图表命名,新图表会替换旧图表。

如果你不喜欢打开多个窗口,可以使用以下的图片选项卡设置:

set autotabgraphs on //打开功能
set autotabgraphs on, perm // 用于永久更改

你也可以尝试以下代码:

sysuse auto, clear // 载入内置数据
set autotabgraphs on //打开功能
scatter price mpg, name(graph1, replace) // 绘制散点图并命名为gragh1
scatter price length, name(graph2, replace) // 绘制散点图并命名为gragh2
set autotabgraphs off //关闭自动标签图形功能
scatter price mpg, name(graph1, replace)
scatter price length, name(graph2, replace)

打开功能

关闭功能

1.6 未记录和多余的命令

Stata 有许多未记录的命令,其中包含一些隐藏的宝藏,可以通过输入以下命令查看这些命令:

  • help undocumented ,其中 margins 选项未记录。

  • help prdocumented ,一个存档文件,其中包含了先前已记录的命令,这些命令已从 Stata 中移除

1.7 数据签名

在与共同合作者、研究助理等共享驱动器上的数据文件时,您可以利用 Stata 内置的数据签名选项 help datasig 。这一功能有助于防止数据篡改,因为任何对变量的修改都将导致数据签名的变化。

1.8 语言切换

help label language ,如果你必须以不同的语言(例如英语、德语、西班牙语等)呈现相同的内容时,可以轻松交换变量和值标签,而无需手动编辑

1.9 交换小数点和逗号

在某些地区,小数点和逗号是交换的,如果需要向不同的受众展示内容,可以查看 help set dp 轻松交换小数点和逗号。

1.10 向数据集添加注释

help notes 允许我们在每个数据集甚至变量上存储注释,例如,注释可以包括关于数据本身的元信息、创建者等其他附加详情

1.12 ado 文件更新

安装来自 SSC 或其他地方的自定义 ado 程序很常见,不要忘记利用 ado update 检查更新,请每隔几周运行一次此命令!

1.13 无需加载即可描述数据

可以运行描述命令,而无需将数据集加载到内存中就读取所有变量名称和标签!例如:

describe using https://stata-press.com/data/r17/even, varlist

1.14 Stata 数据集

sysuse dir 可以快速查看随 Stata 副本提供的所有数据集列表,确保您不仅仅依赖于 auto.dta 这一个数据集。

1.15 示例帮助文件

help examplehelpfile 会指引您到一些相关的文档,以帮助您编写新的 Stata 命令,并创建相应的帮助文件

1.16 查找系统信息

sysdir 命令通常由程序员或需要搜索特定程序位置的用户使用。

例如,如果您下载了其他用户编写的程序,这些程序文件可能会存储在 Stata 的特定文件夹中,比如 "PLUS" 文件夹。

通过使用 sysdir 命令,您可以找到这些文件的准确路径,从而方便您管理和调用这些程序文件。

1.17 记录命令运行时间

我们使用内置的定时器选项来记录特定命令或一组命令的运行时间,例如:

webuse highschool, clear //加载数据集

timer clear //清除任何已经存在的定时器设置
timer on 1 //启动定时器 1
svy: regress weight height //在该定时器下运行命令
timer off 1 //停止定时器 1

timer on 2
svy: regress weight height sex
timer off 2

timer list //显示了两个定时器的结果,包括运行时间和消耗的系统时间

有关更详细的信息,可以参阅 help timer help rmsg 帮助文件。

2. 学会使用 local 和内置命令

理解和掌握 local 对于提升编程技能至关重要。它可以使您的代码更加简洁整洁。以下是一些日常问题的建议:

2.1 使用变量标签局部变量

通过读取变量标签并将其存储为剧本,我们可以在生成图表时使用它们进行标记或其他操作。例如:

foreach x of varlist xx-yy {
local v : var label `x'
twoway line yvar xvar, title("`v'")
}

2.2 使用值标签作为局部变量

lab de varlab  1 "x" 2 "y"... //定义值标签集varlab
lab val varname varlab //把变量varname关联到varlab
levelsof varname, local(lclname) //获取变量值,并存储到lclname
foreach x of local lclname { //遍历lclname局部变量中存储的每一个值
local t : label varlab `x'
//提取出与当前x值相对应的标签,并将这个标签存储到变量t中
twoway line yvar xvar if varname==`x', title("`t'")
}

另外,levelsof 命令非常强大。

stataCopy Codelevelsof country, local(lvls)
local items = `r(r)'

通过使用 levelsof 命令,我们可以获取某个变量(如示例中的 country )所有不同值的列表,并将这些值存储到变量 lvls 中。

此外,通过 local items = r(r) ,我们可以得到这些不同值的总数,即 country 变量中不同国家的数量。

这种方法在处理数据时非常有用,尤其是当你需要了解数据集中有多少个独特的分组、类别或时间段时。

同时,查看 return list 能够帮助我们更好地理解 levelsof 命令执行后返回的结果和其他可用的信息,这对于深入分析和处理数据非常有帮助。

2.3 设置局部变量格式

下面的例子展示了如何汇总 price 变量,将其乘以某个系数,改变其显示格式,然后再次存储到一个局部变量中:

sysuse auto, clear
summ price
local x = `r(mean)' * 10
local x : di %10.2fc `x'
display "`x'"

2.4 日期的显示格式

在 Stata 中处理日期数据往往比较复杂,因为 Stata 使用一种本地特定的格式来存储日期。

下面的命令展示了三种不同的日期格式化选项,可以帮助你更好地理解和使用 Stata 进行日期处理。

  1. 获取并显示当前日期
   // 获取当前日期
local date: display %tdd_m_yy date(c(current_date), "DMY")
// 显示当前日期
display "`date'"

这个选项通过 %tdd_m_yy 格式来显示当前日期。

这种格式化方式可以让你直观地看到日期,非常适用于需要立即显示日期的场景。

  1. 从数据变量中提取并显示日期
   // 汇总日期变量
summ date
// 获取并显示最大日期
local date: display %tdd_m_yy `r(max)'
display "`date'"

这个选项展示了如何从一个数据集中的日期变量获取特定的日期(例如最大日期),并将其格式化显示。

这对于自动标记图表中的日期非常有用,尤其是在数据集中不同组有不同结束日期的情况下,比如每日的 COVID-19 病例数等。

  1. 通过字符串操作格式化日期
   // 将日期中的空格替换为下划线
local date2 = subinstr(trim("`date'"), " ", "_", .)
display "`date2'"

最后这个选项展示了我们可以实际上通过字符串操作来格式化日期局部变量。

在这个例子中,日期中的空格被下划线替换。

这在导出图表、文件名等场合非常有用,因为在这些名称中通常不希望出现空格。

  1. 更多格式化日期的方法

    除了上述方法,还可以尝试以下几种不同的日期格式化选项:

   // 使用下划线分隔日期元素
local date = string(date(c(current_date), "DMY"), "%tdd!_m!_Y")
display "`date'"

// 以CCYYNNDD格式显示日期
local date = string(date(c(current_date), "DMY"), "%tdCCYYNNDD")
display "`date'"

// 以CYND格式显示日期
local date = string(date(c(current_date), "DMY"), "%tdCYND")
display "`date'"

这些方法提供了不同的日期表示方式,可以根据你的具体需求选择使用。

   local date: display %tdd_m_yy date(c(current_date), "DMY")
display "`date'"

summ date
local date: display %tdd_m_yy `r(max)'
display "`date'"

local date2 = subinstr(trim("`date'"), " ", "_", .)
display "`date2'"

2.5 重置局部变量

这主要是一个编程选项。但假设你正在执行一系列命令,在这些命令中局部变量被重新定义了:

//代码块1
foreach x of varlist aa-gg {
summ `x'
local mylocal = `mylocal' + `r(mean)'
}
// 代码块2
foreach x of varlist hh-zz {
summ `x'
local mylocal = `mylocal' + `r(mean)'
}

在上面的例子中,我们实际上希望从代码块 2 开始时拥有一个干净的局部变量。但由于我们已经在代码块 1 定义了它,这个值将会被传递到下一个代码块。

这里,我们可以通过简单地插入 local 来重置局部变量:

local mylocal

在第一个和第二个代码块之间插入这段代码可以解决问题。

当然你也可以为不同的局部变量使用唯一的名称。

2.6 使用 r(table)

Stata 会将一些关键的统计结果保存在内部的局部变量中,便于用户进一步分析和引用。其中, r(table) 是一个重要的局部变量,它以矩阵的形式存储了回归分析的结果,比如系数估计值、标准误、t 值、P 值等信息。

当我们执行如下回归命令后,我们可以通过以下命令查看 r(table)

sysuse auto, clear
reg price mpg weight length

ret li
mat li r(table)

ret li 命令列出了所有的返回结果,而 mat li r(table) 则专门列出了 r(table) 矩阵的内容。

通过如下命令:

di r(table)[1,1]

我们可以直接访问并显示 r(table) 矩阵中特定的元素。在这个例子中, [1,1] 指的是矩阵的第一行第一列的元素,通常是回归系数的估计值。

因此, r(table) 的存在使得我们能够方便地访问回归分析的详细结果,并且可以利用 Stata 的矩阵操作功能来处理这些结果,例如提取特定的统计量或者进行进一步的数学运算。

在 Stata v17 中,有一个很少人知道的内置命令 vl ,它可以快速构建变量列表。下面是如何使用这个命令的中文解释:

2.7 使用 v1 命令构建变量列表

在 Stata v17 中,有一个很少人知道的内置命令 vl ,它可以快速构建变量列表。

sysuse auto, clear

vl set

使用 vl set 命令,Stata 会自动为你生成分类变量和连续变量的列表。

3 Dofiles

我们的许多时间都花在了 do 文件编辑器前,然而这个窗口仍然隐藏着许多秘密。下面的一些提示可能只适用于较新版本的 Stata(16 或 17+)!

3.1 代码分节

你可以使用花括号折叠你的 do 文件中的代码块:

{

}

这允许你隐藏大块的代码。对于已经完成的例程,或者只需要运行一次的代码非常有用。

3.2 静默执行

继上一个提示之后,你也可以使用 quietly 配合花括号来抑制代码块的输出:

qui {

}

这对于编程或者当你运行一个大型 do 文件并想要隐藏某些部分时非常有用。

3.3 do 文档的并排堆叠

你可以在编辑器中水平或垂直堆叠 do 文件。只需将一个 do 文件拖动到水平线上的右侧面板,选项就会弹出。

这对于比较文件版本非常有用。或者,仅仅是为了能够打开多个 do 文件而不必跳转标签页。

注意 :每个“块”允许你打开多个 do 文件。所以你实际上可以打开不同的文件集。

3.4 do 文档中的缩进

全部左对齐实际上非常难以阅读。

如果你使用了很多 for、while、if、else 条件和循环,或者使用了很多 Mata,启用缩进可以帮助你整齐地格式化你的代码。

可以设置显示缩进指南:

3.5 自定义 do 文档护眼色

为了调整 do 文件编辑器的界面颜色,可以遵循以下步骤:

  1. 打开 do 文件编辑器,在顶部菜单栏中选择“编辑”选项。
  2. 从下拉菜单中点击“首选项”以访问编辑器的设置界面。
  3. 在首选项窗口中,导航至“显示项”部分,并选择“常规”下的“背景”选项,这里您可以对背景颜色进行设置。
  4. 进入“自定义颜色”区域,属于 RGB 值,推荐参考[11 种能减少眼睛疲劳的护眼色”]((https://zhuanlan.zhihu.com/p/523742319)该文附有颜色代码及 RGB 值

4 数据管理

数据管理可能占据了研究中 80%的时间,有许多技巧,以下是我最喜欢的一些:

4.1 查找变量

如果你有成百上千个变量,你可以:

  1. 使用 lookfor 根据名称和标签搜索关键词:
lookfor gender
  1. 使用 ds 根据变量类型搜索,给出所有数值型变量:
ds, has(type numeric)

你也可以指定“not”选项,这将给出与前一个命令相同的结果:

stataCopy Codeds, not(type string)

4.2 变量名在第一行

有时你导入 excel/csv 文件时,表头信息会出现在第一行。这段代码可以帮助你:

foreach x of varlist _all {
local header = `x'[1]
ren `x' `header'
}
drop in 1
destring _all, replace

如果你使用较新的 import 命令而不是 insheet,那么你也有选项指定哪一行包含变量名。

但上述情况对于那些格式不规范的文件仍然很有用。

4.3 读取目录中的所有文件

当你在某个目录中解析大量文件时,特别是这些文件有不规则名称时,这个方法非常方便。

你可以这样找到文件夹中的所有内容:

local x: dir . files "*"

或者你可以使你的搜索更具体:

local x: dir . files "*.csv"

你也可以通过简单地输入以下内容来查看:

display "`x'"

4.4 条件

如果你基于许多条件生成变量,那么与其指定一个巨大的列表( x==1 | x==2 | x==5 etc.),不如使用:

gen y = 1 if inlist(x,1,2,5) // 对特定值

对于连续变量,以下做法效果相同:

sysuse auto
gen v1 = mpg > 20
gen v2 = !inrange(mpg, 0, 20)
gen v3 = cond(mpg > 20, 1, 0)
recode mpg (0/20 = 0) (21/. = 1), gen(v4)
gen v5 = irecode(mpg, 0, 20, .)

4.5 reshape

你可以简单地通过输入 reshape long reshape wide 来在长格式和宽格式之间切换。

如果你遇到困难,可以使用 reshape error 来解决。

4.6 快速总结使用 inspect

如果你想快速检查一个变量,那么使用 inspect(可以看 help inspect

它类似于 summarize,但在结果窗口中给出了一个整洁的直方图。

sysuse auto
summ weight
inspect weight

它还有助于快速概览变量的完整性

4.7 值标签

你可以使用 modify replace 选项来防止代码块中断:

lab de mylab 1 "Option 1" 2 "Option 2" 3 "New option", replace

你可以使用 label list 查看所有标签,使用 label drop 删除它们。

而且你可以使用未记录的 _strip_labels 来去除变量的标签。

4.8 样本面板数据集

我们可以使用 Stata 中的 egen 命令和其 seq 选项来高效地创建一个平衡面板数据集。

这个方法避免了复杂的数据操作步骤,直接生成了所需的面板结构:

// 定义面板变量
local units = 40 // 面板变量
local start = 2000 // 时间开始
local end = 2022 // 时间结束

local time = `end' - `start' + 1
local obsv = `units' * `time'
set obs `obsv'
egen id = seq(), b(`time')
egen t = seq(), f(`start') t(`end')

4.9 从 dofiles 运行 dofiles

你可以从一个 dofile 内运行另一个 dofile,这为组织和管理代码提供了极大的灵活

4.10 可视化 Mata 矩阵

你可以使 heatplot ssc install heatplot )来可视化 Mata 矩阵:

mata A = runiform(10,10)
heatplot mata(A)

如果你想看看方差-协方差矩阵或空间误差项的样子,这会非常方便

4.10 clear vs clear all

clear 选项与 clear all 不同:

  1. clear (无任何选项) :这个命令仅仅清除当前内存中的数据集,包括其中的所有观测值和变量。
  2. ** clear all **:这个命令提供了一种更彻底的清理方式。它不仅清除了数据集,还清除了 Stata 内存中几乎所有用户创建的内容,包括但不限于矩阵、mata 对象(Mata 中的变量和函数)、已加载的数据框架、用户定义的程序、全局和局部宏等。使用 clear all 可以让 Stata 回到一个干净的状态,就像刚启动软件时一样。

4.11 gtools

gtools 非常快速,你可以使用它来非常快速地重塑、折叠非常大的数据集,所以值得安装:

ssc install gtools, replace

4.12 空间数据

Shapefile 是 GIS 中常用的一种地理空间数据格式,它能够存储位置、形状和属性信息,广泛应用于地图制作和空间数据分析。

Stata 提供的 shapefiles 导入和导出功能,允许用户将 shapefile 格式的地理空间数据导入到 Stata 中,或将 Stata 中的数据导出为 shapefile 格式,以便于在 GIS 软件中使用。

可以查看帮助文档 help import shp

4.13 正则表达式的 regex

这段代码去除了字符串变量中所有额外的空白/制表符,整齐地将你的句子变为单空格:

x2= trim(ustrregexra(x,"/(\r\n\t)+|\r+|\n+|\t+/", ""))

5 图表







请到「今天看啥」查看全文