温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
编译: 安贤娟(北京信息科技大学)
「Source:Running sections of do-files.」
五一节,跟大家分享一个小玩意,希望各位能在轻松愉快的心情下掌握这个在 dofile 中执行命令的小技巧。
有关 dofile 的设定、语法高亮,以及 Profile 设定等先导内容,请按需点击如下链接之一:
如今 do-files 越来越大、越来越复杂,而有时只是想运行 do 文档中的一部分代码。
为了达到这个目的,我们可以使用 do-switches 模式,简言之,就是在 do 文档开头部分设置几个开关 (取值 0 或 1),进而通过「打开」或「关闭」这些开关来控制哪些代码被执行。
我们都经历过这样一个过程:
1. 错误!r(xxx)
然后——
1. 修正一小部分代码
2. 在大段的 do-file 中选择一段代码并运行它
(重复上述步骤)
非常简单: 如果您想运行代码的某个部分,只需将该部分对应的 local 设置为 1(否则设置为 0 或其他值)。然后,用条件块将要打开或关闭的代码段括起来。
如果你只处理 B 部分,那么你可以将除 B 之外的所有开关设置为 0,然后运行整个 do-file,而无需手动选择其中的一部分。
显然,在第一次进行上述设定时略显繁琐,但后续执行过程会变得很快捷。
*-这三行是用来定义「开关」的
local A 0 // 第 1 个开关
local B 0 // 第 2 个开关
local merge 0 // 第 3 个开关
*-Note: 以下是代码主体
if `A' == 1 {
* Import and save A
}
if `B' == 1 {
* Import and save B
}
if `merge' == 1 {
* Merge A with B and save
}
在这个简单的例子中,只选择处理导入的 A ,将其设置为 1,B 和 marge 开关设置为 0,然后运行全部的 do-file。
sysuse "nlsw88.dta"
global y "wage"
global x "hours tenure married collgrad"
local A 1
local B 0
local merge 0
if `A' == 1 {
reg $y $x
}
if `B' == 1 {
reg $y $x i.race i.industry
}
if `merge' == 1 {
reg $y $x
reg $y $x i.race i.industry
}
运行结果展示
结果中只显示了打开开关的 A 部分,而 B 和 merge 部分均没有显示。
if `A' == 1 {
. reg $y $x
Source | SS df MS Number of obs = 2,227
-------------+---------------------------------- F(4, 2222) = 67.82
Model | 8053.67746 4 2013.41937 Prob > F = 0.0000
Residual | 65967.1331 2,222 29.6881787 R-squared = 0.1088
-------------+---------------------------------- Adj R-squared = 0.1072
Total | 74020.8106 2,226 33.2528349 Root MSE = 5.4487
------------------------------------------------------------------------------
wage | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
hours | .0616148 .0113148 5.45 0.000 .0394262 .0838034
tenure | .1439428 .0212953 6.76 0.000 .102182 .1857037
married | -.273562 .2436884 -1.12 0.262 -.7514427 .2043187
collgrad | 3.330943 .2730949 12.20 0.000 2.795395 3.866491
_cons | 4.029129 .4833735 8.34 0.000 3.081218 4.97704
------------------------------------------------------------------------------
. }
. if `B' == 1 {
. reg $y $x i.race i.industry
. }
. if `merge' == 1 {
. reg $y $x
. reg $y $x i.race i.industry
. }
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD