查看原文
其他

追踪命令set trace on——解你燃眉之急

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:李钊颖

文字编辑:李婷婷

技术总编:余术玲

爬虫俱乐部云端课程来袭!

爬虫俱乐部于2020年8月25日至28日在线上举行的Stata数据分析法律与制度专题训练营招生工作圆满结束!

    另外,爬虫俱乐部于2020年7月在线上举办的Stata与Python编程技术训练营已圆满结束。应广大学员需求,我们的课程现已在腾讯课堂双双上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠劵!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元

导读

很多刚开始接触Stata的小伙伴都很怕遇到报错,辛辛苦苦写的程序运行时报错了,但自己又找不到出错的地方,这个时候不要着急,我们可以用程序来定位出错的地方,精准出击。
Stata中的set trace on命令就可以实现追踪。该命令不仅可以用作展示程序运行的详细过程,还可以帮助我们调试程序。在默认情况下,设置跟踪是关闭的,要使用它,只需键入set trace on,并再次运行程序,此时Stata将显示它运行的程序文件中的每一行,因此可以看到大量的输出,如果程序输出一个错误提示并退出运行,那么这个错误提示将出现在调试程序中Stata执行的最后一行之后。在知道哪一行出现错误之后,就可以对程序进行精准的更改了。下面我们介绍该命令的两个基本用法。
1. 展示程序运行过程
Stata通常不会在执行程序时显示运算过程,默认情况下仅显示执行结果,运算过程是不显示的:
clear allsysuse auto.dtareg length price-weight

但是,当set trace打开时,再运行就可以显示详尽的运算过程了:
set trace onreg length price-weight
需要注意的是,set trace on必须和程序一起运行才能显示运算过程。

2. 精准锁定出错程序
除了详尽展示运算过程这个功能外,set trace on还可以基于自身追踪程序的特点,帮助我们准确定位程序中可能出现的错误。下面我们通过一段简单的程序来展示这种用法:
clearset obs 50gen x1 = runiform()gen x2 = rnormal(0,5)gen x3 = uniform()gen x4 = uniform()*10gen y = x1 + x2 + x3 + x4local i 1while `i'<= 2{ replace y = y + x`i' local i = `i' + 1 if `i'> 2{ replace y = x`i' + `1' }}

运行结果报错了,下面我们加入追踪命令set trace on看看问题出现在哪里:
clearset obs 50gen x1 = runiform()gen x2 = rnormal(0,5)gen x3 = uniform()gen x4 = uniform()*10gen y = x1 + x2 + x3 + x4local i 1set trace onwhile `i'<= 2{ replace y = y + x`i' local i = `i' + 1 if `i'> 2{ replace y = x`i' + `1' }}

从上图中可以看出此时Stata输出了详细的计算过程和错误出现的具体位置,本案例中报错是因为混淆了“i”和“1”,这是一个很常见的错误。在刚接触Stata时,这个功能能帮助新手快速找到出错程序,十分方便确定命令出错的具体原因,也很适合复杂嵌套的程序debug。不使用此功能时,可以选择关闭此功能,只需要运行set trace off即可。

当我们修改我们的程序时,应确保drop _all现有程序,以便Stata可以重新读取我们的程序文件并实现我们所做的任何更改。如果我们的程序很长,或者跟踪命令会有很多输出,我们可以使用log命令记录输出,方便我们之后查看结果日志文件。下面给出使用这个命令的通用做法:

log using junk, replaceprog drop _allset trace on*run your program again //把需要跟踪的程序放这里log closeset trace off






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

爬虫大杀器 | “手把手”教你配置Selenium

小白必看!Anaconda安装全攻略

数据类型转换之destring和tostring命令

mvencode和mvdecode——打开缺失值与特定数值转换大门的钥匙
优雅的map()
Python实现Excel中vlookup函数功能
Stata实现Excel中vlookup函数功能
gen与egen,傻傻分不清楚?

用WordStat看中国日报新闻(二)

一招轻松合并文件——openall命令介绍

爬虫俱乐部平安经
一个函数实现PDF文档合并与拆分
补全股票代码位数的一百种姿势

明星闪闪亮:各校高被引论文

高校经管类核心期刊发文排行榜|2010-2019

PDF图片提取
PDF文档转换成图片 
关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存