Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:郭盼亭 (厦门大学)
邮箱:gpting2020@163.com
目录
不知道你在刚开始写代码的时候,是否遇见过以下情况:不确定自己写的对不对?又或者运行的时候总是报错?又或者是写出来的格式总是没有别人写的好看?是否希望有一款自动纠错的工具?
stata_linter
或许可以帮助你!该软件包是一种主观的检测工具,该命令是根据世界银行开发影响评估部门的良好编码实践编写的,旨在改善 Stata 的 do 文件的可读性和组织性。
在 Stata 中可以通过 lint
命令来实现两个功能:
命令安装:
ssc install stata_linter, replace
需要注意的是,要运行此命令,使用者需要安装 Stata16 版本或更高版本、Python 和 Python 的 Pandas 包。
命令语法:
lint "input_file" [using "output_file"] , [options]
using
指定了 output_file
,那么 linter
将应用纠正功能 (Correction),将更正后的代码写入指定的 output_file
。output_file
,该命令将只执行检测功能 (Detection),在 Stata 的 Results 窗口中返回更正的建议和 do 文件的潜在问题的报告。其中,options
如下:
verbose
:报告每行 do-file 中发现的不良实践和问题。nosummary
:禁止生成不良实践和潜在问题的总结表。indent(integer)
:检查缩进编码实践时使用的空格数 (默认值为 4)。space(integer)
:检查缩进实践时使用的空格数而非硬制表符 (默认值:与缩进值相同)。linemax(integer)
:检查行扩展实践时一行中的最大字符数 (默认值为 80)。excel(filename)
:将逐行结果保存为 Excel 文件。force
:允许输出文件名与输入文件名相同,覆盖原始 do-file。不建议使用此选项,因为命令创建的纠正后的 do-file 可能会破坏代码的某些部分,使用者应该始终保留其原始代码备份。automatic
:自动纠正所有不良编码实践,无需询问是否要纠正每个不良编码实践。默认情况下,命令会在生成总结报告后交互式地询问用户每个纠正。replace
:覆盖任何现有的输出文件。
. lint "test/bad.do"
* 在您的 Stata 控制台上,您将获得代码中发现的不良编码实践的摘要:
---------------------------------------------------------
Bad practice Occurrences
---------------------------------------------------------
Hard tabs used instead of soft tabs: Yes
One-letter local name in for-loop: 3
Non-standard indentation in { } code block: 7
No indentation on line following ///: 1
Missing whitespaces around operators: 0
Implicit logic in if-condition: 1
Delimiter changed: 1
Working directory changed: 0
Lines too long: 5
Global macro reference without { }: 0
Use of . where missing() is appropriate: 6
Backslash detected in potential file path: 0
Tilde (~) used instead of bang (!) in expression: 5
--------------------------------------------------------
如果要获取出现这些不良编码实践的行,可以使用选项,例如 verbose
。
. lint "test/bad.do", verbose
在命令的常规输出之前提供以下信息:
(line 14): Use 4 white spaces instead of tabs. (This may apply to other lines as well.)
(line 15): Avoid to use "delimit". For line breaks, use "///" instead.
(line 17): This line is too long (82 characters). Use "///" for line breaks so that one line has at m
> ost 80 characters.
(line 25): After declaring for loop statement or if-else statement, add indentation (4 whitespaces).
(line 25): Always explicitly specify the condition in the if statement. (For example, declare "if var
> == 1" instead of "if var".)
...
如果要更正 do-file 中的不良做法,可以运行以下命令:
. lint "test/bad.do" using "test/bad_corrected.do"
在这种情况下,lint
命令将创建一个名为 的 do 文件。Stata 会询问您是否要对检测到的每个不良做法逐个执行一组更正。您可以添加自动执行更正的选项,并跳过手动确认。强烈建议输出文件与输入文件具有不同的名称,因为原始 do 文件应保留为备份。
作为此命令的结果,一段 Stata 代码如下所示:
#delimit ;
foreach something in something something something something something something
something something{ ; // some comment
do something ;
} ;
#delimit cr
成为:
foreach something in something something something something something something ///
something something { // some comment
do something
}
和
if something ~= 1 & something != . {
do something
if another == 1 {
do that
}
}
成为
if something ~= 1 & something != . {
do something
if another == 1 {
do that
}
}
与检测功能相关的选项:
verbose
:显示出现不良做法的所有行。nosummary
:禁止显示不良做法的摘要。excel()
:将检测结果导出到 Excel。校正功能独有的选项:
automatic
:更正所有不良编码实践,而不询问是否希望纠正检测到的每个不良编码实践。replace
:替换现有输出文件。force
:允许输出文件名与输入文件名相同 (不推荐)。这两个功能的选项:
indent()
:指定用于缩进的空格数 (默认值为 4)。linemax()
:一行中的最大字符数 (默认值为 80)。tab_space()
:使用的空格数而不是硬制表符 (默认值为 4)。使用软制表符 (即空格),而不是硬制表符:使用空格 (通常使用 2 或 4 个空格) 而不是硬制表符。您可以在 do-file 编辑器首选项中更改此选项。
避免使用抽象索引名称:在 for
循环中,索引名称应描述代码循环的内容。因此,避免像这样编码:
foreach i of var cassava maize wheat { }
相反,循环命令应以描述性方式在本地命名索引:
foreach crop of var cassava maize wheat { }
使用正确的缩进:声明 for
循环语句或 if-else
语句后,添加带有空格 (通常为 2 或 4 个空格) 的缩进。
声明换行符后使用缩进 ///
:在新行语句后,添加缩进 (通常为 2 或 4 个空格)。
使用 !missing()
函数表示缺失值:为清楚起见,请使用 !missing(var)
表示缺失值,而不是 var < .
var != .
。
在数学符号 (+
、=
、<
、>
) 周围添加空格:为了提高可读性,请在数学符号周围添加空格。例如,用 gen a = b + c if d == e
代替 gen a=b+c if d==e
。
在 if
语句中指定条件:始终在 if
语句中显式指定条件。例如,声明 if var == 1
而不是 if var
。
不要使用 delimit
作为分隔符,而应使用 ///
作为换行符:有关使用换行符的详细信息,请参阅此处。
不要使用 cd
命令更改当前文件夹:使用绝对和动态文件路径。
对过长的行使用换行符 ///
:对于太长的行,请使用换行符并将它们分成多行。建议将一行中的字符数限制在 80 以内。虽然有时这很困难,因为例如,Stata 不允许双引号内的分隔符,请尽可能遵循此规则。
对全局宏使用大括号:始终用于全局宏。例如,使用 ${ }
${global}
代替 $global
。
在条件表达式中包含缺失值:条件表达式可能对于缺失值被计算为 true。确保通过在表达式中使用来显式考虑缺失值。var != 0
var > 0
missing()
。
检查文件路径中是否未使用反斜杠:检查文件路径中是否使用反斜杠(\)
。如果您正在使用它们,请将它们替换为正斜杠(/)
。
检查波浪号 (~)
是否不用于否定:如果使用波浪号进行否定,请将其替换为 (!)
符号。
该功能不会更正检测到的所有不良做法。 它仅更正以下内容:
delimit
替换为///
。tab_space()
。indent()
。linemax()
。如果省略该选项,将提示用户确认他们是否要在检测到这些不良做法时才更正这些不良做法。如果未检测到这些,它将显示以下消息:
Nothing to correct.
The issues lint is able to correct are not present in your dofile.
No output files were generated.
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