2014-10-28 306 views
1

我正在处理由其他人创建的.do文件。此人在整个文件中使用分号分隔符。我正在尝试浏览这个文件,看看发生了什么。我喜欢通过选择部分代码并点击“执行选择(做)”按钮来完成此操作。然而,分隔符似乎搞乱了这一点。我有没有解决办法?命令行中的Stata分隔

+0

这应该不会引起任何问题......你有没有在运行任何选择之前通过#delimit设置你的分隔符? – 2014-10-28 14:54:29

+0

我不能在命令行中使用''#delimit;'''。如果我从.do文件运行选择,我想我必须有''#delimit;''作为选择的一部分,这是不会发生的,因为在开始时总是包含这个每一个选择。 – bill999 2014-10-28 14:58:05

回答

2

假设你的待办事项文件看起来是这样的:

#delimit ; 
set obs 
     10 ; 
gen x = _n ; 
gen y = x^2 ; 
gen z = x 
     ^3; 

任何时候当你选中一个选项,然后按“执行选择(做)”,塔塔会创建一个临时的,独立的做文件,默认划cr并运行:

"When a do-file begins execution, the delimiter is automatically set to 
carriage return, even if it was called from another do-file that set the 
delimiter to semicolon." 

它不会从控制台顺序运行这些命令。因此,如果您选择上述do-file中的前2个命令,则临时do-file将包含对#delimit的调用,而如果选择了最后2个命令,则临时do-file将不会有此调用,并会引发语法两行命令错误。

一个解决方案可能是将选择复制粘贴到刚开始有#delimit命令的新处理文件,然后运行该文件。

你也可以编写一个脚本来清除你的分号分号。如果一行不以分号结尾,则将下一行附加到当前行的末尾,然后再次检查该行。根据你的do-file中语法的复杂程度,这可能或多或少有些困难。

+0

我想摆脱分号,但文件很长。我发现了一些类似于您创建新文件和复制粘贴的建议。它建议创建一个profile.do文件并在其中包含“#delimit;”。这会工作吗?我发现这个建议[这里](http://stackoverflow.com/questions/5985751/how-to-execute-multiple-line-selection-in-do-file-editor-of-stata)。如果可行,我将在哪里存储profile.do文件,并且在处理其他不涉及''delimit''的文件时,是否需要删除它? – bill999 2014-10-28 15:24:17

+0

你可以试试,但我认为它不会起作用。 'profile.do'在每个Stata会话开始时运行,而不是在运行新的do-file时运行。只要你运行一个没有'#delimit'命令的do-file,它就默认设置为'cr'。 – 2014-10-28 15:30:45

+0

哎呀。感谢所有的帮助。听起来最好的做法是替换一切,避免在未来使用分隔符。 – bill999 2014-10-28 15:31:56

1

另一种选择是通过用/* */括住它们并使用exit;您想要停止的位置注释掉已经运行的行。你必须对本地宏有点小心。