Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:梁淑珍 (华侨大学)
邮箱:13514084150@163.com
编者按:本文主要摘译自下文,特此致谢!
Source: Asjad Naqvi, 2022, Blog, The awesome Stata Tips collection! -Link-
目录
Stata 是一个应用相当广泛的软件,其中还有很多隐藏的功能、快捷方式和命令,可以大大提升用户体验!本文着力介绍一些 Stata 中的好用小技巧,例如在图表和 do 文档中设置标签,自动缩放图轴,暂元,数据管理的快捷方式等。在进行本文的操作时,我们建议读者使用 Stata16 及以上版本。
除默认设置外,Stata 还能进行个性化设置。在这一部分,我们主要讲解用户界面和软件的个性化设置技巧。
右击选择首选项
常规
整体颜色方案
,即可自定义颜色模式。深色给 Stata 增添了不少神秘感和高级感,很多用户会选择这个模式。当然,这些模式可任君挑选,依自己的视觉体验选择即可。
如果你在编写代码的过程中不经常使用鼠标,那么可以使用键盘上的 PageUp
和 PageDown
实现 do 文档翻页,结果窗口翻页,以及命令窗口重现历史命令语句。
niceness
设置 Stata 将未使用的内存块返回给系统的等待时间。如果 Stata 过早的释放闲置内存,会使得其频繁调用系统内存,如果 Stata 长时间占用闲置内存,则会影响系统中其他程序运行。一个较好的等待时间为 5,即 1 分钟,这也是 Stata 默认的等待时间。此外,我们还可以设置如下等待时间:
niceness waiting time (m:s)
---------------------------------
10 0:00.000
9 0:00.125
8 0:00.500
7 0:01
6 0:30
5 1:00
4 5:00
3 10:00
2 15:00
1 20:00
0 30:00
---------------------------------
Niceness 10 corresponds to being totally nice.
Niceness 0 corresponds to being an inconsiderate, self-centered, totally selfish jerk.
Stata 在绘制多张图时,默认情况下,一个窗口仅显示一张图片。我们可以通过设置 autotabgraphs
,使得多张图形显示在一个窗口中。
. * 开启设置
. set autotabgraphs on
. * 关闭设置
. set autotabgraphs off
. * 永久开启
. set autotabgraphs on, perm
. * graph1 和 graph2 显示在一个图像窗口中
. sysuse auto, clear
. set autotabgraphs on
. scatter price mpg, name(graph1, replace)
. scatter price length, name(graph2, replace)
. * graph1 和 graph2 分别显示在两个图像窗口中
. set autotabgraphs off
. scatter price mpg, name(graph1, replace)
. scatter price length, name(graph2, replace)
当多人共同处理数据文件时,可以使用 Stata 自带的数据签名功能,来查看数据是否发生变化。
. sysuse auto, clear
. datasignature set
74:12(71728):3831085005:1395876116 (data signature set)
. save tmp, replace
. use tmp, clear
. replace price = 5000 in 50
. datasignature confirm
data have changed since 28may2022 16:40
数据的任何变化都会导致数据签名发生改变。
在 Stata 中,我们可以给数据集或变量名添加注释。
. webuse auto4, clear
. * 给数据集添加注释
. note: Send copy to Bob once verified.
. notes
_dta:
1. Send copy to Bob once verified.
. note: Mary wants a copy, too.
. notes
_dta:
1. Send copy to Bob once verified.
2. Mary wants a copy, too.
. note: TS merged updates from JJ&F // 注释添加时间
. notes
_dta:
1. Send copy to Bob once verified.
2. Mary wants a copy, too.
3. 28 May 2022 16:48 merged updates from JJ&F
. * 给变量添加注释
. note mpg: is the 41 a mistake? Ask Bob.
. note mpg: what about the two missing values?
. notes
_dta:
1. Send copy to Bob once verified.
2. Mary wants a copy, too.
3. 28 May 2022 16:48 merged updates from JJ&F
mpg:
1. is the 41 a mistake? Ask Bob.
2. what about the two missing values?
更新安装的外部命令时,可以输入:
. ado update
Checking status of installed packages:
[1] fs at http://fmwww.bc.edu/repec/bocode/f:
installed package is up to date
...
由于一些命令可能会频繁更新,建议每过几周就运行一下这条命令。
当我们寻找 Stata 系统文件的储存路径时,可以输入 sysdir
。
. sysdir
STATA: D:\Program\Stata17\
BASE: D:\Program\Stata17\ado\base\
SITE: D:\Program\Stata17\ado\site\
PLUS: D:\Program\Stata17/ado\plus\
PERSONAL: D:\Program\Stata17/ado\personal\
OLDPLACE: c:\ado\
理解和掌握局部暂元的用法,对提升编程水平大有裨益。例如,画完图后要给图片增加标签,与其手动定义,不如通过 local
储存变量标签,将其传递给图形。代码的框架为:
foreach x of varlist xx-yy{
local v : var label `x'
twoway line yvar xvar, title("`v'")
}
如果你要处理的是一份格式清楚的数据,并需要对各种变量进行循环,那么上述代码能为你节省大量时间。
与上述将变量标签存储为暂元一样,我们也可以将值标签存储为暂元。
lab de varlab 1 "x" 2 "y"...
lab val varname varlab
levelsof varname, local(lclname)
foreach x of local lclname {
local t : label varlab `x'
twoway line yvar xvar if varname==`x', title("`t'")
}
其中,levelsof
是一个强大的命令,不仅可以将每个变量的值信息储存到暂元中,还能返回一些计数信息。
. sysuse auto, clear
. levelsof make, local(lvls)
`"AMC Concord"' `"AMC Pacer"' `"AMC Spirit"' `"Audi 5000"' `"Audi Fox"' `"BMW 320i"' ...
. return list
scalars:
r(N) = 74
r(r) = 74
macros:
r(levels) : "`"AMC Concord"' `"AMC Pacer"'..."
. dis r(r)
74
定义完一个暂元后,我们可以通过计算、设置格式等方式定义新的暂元。
. sysuse auto, clear
. sum price
. local x = `r(mean)' * 10
. dis `x'
61652.568
. local x : di %10.2fc `x'
. dis "`x'"
61,652.57
具体来看,我们先将 price 均值乘以 10 储存到暂元 x
中,此时的结果为 61652.568。接下来,我没又利用 format
设置 x
的格式,并将结果仍然储存在 x
中。
. local date = string(date(c(current_date), "DMY"), "%tdd!_m!_Y")
. dis "`date'"
28_May_22
. local date = string(date(c(current_date), "DMY"), "%tdCCYYNNDD")
. dis "`date'"
20220528
. local date = string(date(c(current_date), "DMY"), "%tdCY-N-D")
. dis "`date'"
2022-05-28
在定义暂元的过程中,只要暂元的命名相同,暂元中储存的数据就会一直传递下去。以下列代码为例,第一个代码块定义的 mylocal
,其值会传递到第二个代码块的 mylocal
中。
* 第一个代码块
foreach x of varlist aa-gg {
sum `x'
local mylocal = `mylocal' + `r(mean)'
}
* 第二个代码块
foreach x of varlist hh-zz {
sum `x'
local mylocal = `mylocal' + `r(mean)'
}
do 文档编辑器里藏着很多秘密,以下的小技巧可能只适用于 Stata16 及以上版本。
可以使用 {}
折叠 do 文档中的代码块,例如:
{
code block
}
使用 quietly
命令仍然可以运行代码,但代码的运行结果不会显示在 Stata 的结果输出窗口。可以和上述的 {}
结合使用,Stata 不会输出代码的运行结果。
qui {
<code block here>
}
这可以满足运行大项目并想隐藏一些输出结果的要求,非常好用!
这里介绍一个鲜为人知的小技巧,可以在编辑器中水平或垂直堆放 do 文档。具体操作如图 (用鼠标点中 dofile 文档的标题框,快速向下拖动即可显示图中小对话框)。多个窗口同时显示,有助于对比两份文档的差异。
如果代码中涉及 for
、while
、if
等语句,最好对代码块进行缩进,这样在看代码的层次时能够一目了然。我们可以点开 视图
,勾选 显示缩进指南
设置。虽然 Stata 中没有严格的缩进要求,但最好还是养成缩进的习惯。
数据处理占用研究工作的大部分时间,接下来介绍一下与数据相关的小技巧。
如果数据集里有非常多变量,手工去找太麻烦,可以使用以下的搜索功能:
lookfor
搜索变量名或标签中的关键词:lookfor gender
ds
搜索变量类型:ds, has(type numeric) // 检索到所有数值类型的变量
ds, not(type string) // 检索到所有非字符串类型的变量
在导入 Excel\csv 格式的文件时,表头信息会导入到第一行数据,此时可以选择以下操作方法:
* 法 1:导入 Excel 时,加上 firstrow 选项
import excel filename, firstrow clear
* 法 2:外部命令 nrow
ssc install nrow
nrow 1
* 法 3:重命名
foreach x of varlist _all {
local header = `x'[1]
ren `x' `header'
}
drop in 1
这是个非常便捷的小技巧,当你需要读入工作目录下的所有文件,且文件命名不规律时尤其好用。
* 列出当前工作路径下的所有文件
local x: dir . files "*"
dis `x'
* 等价于
fs
还可以搜索某一格式的文件,以 csv 文件为例:
local x: dir . files "*.csv"
dis `x'
* 等价于
fs *.csv
执行完回归命令后,Stata 会将标准误、return list
中。
. sysuse auto, clear
. regress price mpg
. return list
matrices:
r(table) : 9 x 2
. mat list r(table)
r(table)[9,2]
mpg _cons
b -238.89435 11253.061
se 53.076687 1170.8128
t -4.500928 9.6113239
pvalue .00002546 1.535e-14
ll -344.70079 8919.0881
ul -133.0879 13587.033
df 72 72
crit 1.9934636 1.9934636
eform 0 0
如果需要在满足一些条件的情况下生成新变量,比如当变量 x 的值为 1 或 3 或 5 时,生成新变量 y 的值为 1,简化代码如下:
gen y = 1 if inlist(x, 1, 2, 5)
对于连续变量,请尝试以下代码:
. sysuse auto,clear
. * 如果 mpg>20,v1 的值为 1,否则为 0
. gen v1 = mpg > 20
. * 如果 mpg 不在 0-20 的范围内,v2 的值为 1,否则为 0
. gen v2 = !inrange(mpg, 0, 20)
. * 如果 mpg>20,v3 的值为 1,否则为 0
. gen v3 = cond(mpg > 20, 1, 0)
. * 如果 mpg 在 0-20 的范围内,v4 的值为 0,否则为 1
. recode mpg (0/20 = 0) (21/. = 1), gen(v4)
. * 如果 mpg 在 0-20 的范围内,v5 的值为 1,否则为 2
. gen v5 = irecode(mpg, 0, 20, .)
. * 如果 mpg 在 1-10 的范围内,v6 的值为 1,否则为 0
. gen v6 = inrange(mpg,1,10)
. * 如果 mpg 在 1-10 的范围内,v7 的值为 1,否则为 0
. gen v7 = mpg >=1 & mpg <= 10
宽型数据和长型数据之间的转换可以使用 reshape
命令。reshape long
转换为长型数据,reshape wide
转换为宽型数据。如果转化出错,可以根据 reshape error
的提示进行修改。
为变量添加值标签的代码:
. sysuse auto, clear
. gen v1 = mpg > 20
. label define label1 0 "不超过20" 1 "大于20"
. label values v1 label1
. label list
label1:
0 不超过20
1 大于20
origin:
0 Domestic
1 Foreign
我们可以使用 Ben Jann 的 heatplot
命令对 Mata 矩阵进行可视化。
. ssc install heatplot,replace
. ssc install palettes, replace
. ssc install colrspace, replace
. mata A = runiform(10,10)
. heatplot mata(A)
这个命令有助于展示方差矩阵或空间误差项。
以下代码可以去除数据中的空白字符或制表符:
gen x2= trim(ustrregexra(x,"/(\r\n\t)+|\r+|\n+|\t+/", ""))
gen x3 = ustrregexra(x2,"[ \t]+|[ \t]+", " ")
可以使用最大最小值来调整坐标轴的范围,如果需要定期更新图表,那么就可以使用自动调整轴范围这个功能。
sum date
local x1 = `r(min)'
local x2 = `r(max)'
xlabel(`x1'(10)`x2')
还可以适当拓宽轴范围,例如:
sum date
local x1 = `r(min)'
local x2 = `r(max)' + 30
xlabel(`x1'(10)`x2')
自定义刻度数:
. sysuse auto, clear
. twoway (scatter price mpg), xlabel(#20) ylabel(#20)
此时,x 轴和 y 轴分别设置了 20 个刻度数。
可以通过以下代码调整图例中的标签顺序:
legend(order(5 "var5" 3 "var3" 1 "var1"))
这是一条鲜为人知的技巧,可以通过以下代码在图片中显示文本框并设置格式:
. twoway (scatter mpg weight), text(17 4200 ///
> "Did you know that you can add text boxes" "inside graphs for some additional info?", ///
> size(small) box just(left) margin(l+2 t+2 b+2) fcolor(gs14%80) lw(none))
Note:产生如下推文列表的 Stata 命令为:
lianxh 程序, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh