2014-10-28 439 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;您想要停止的位置註釋掉已經運行的行。你必須對本地宏有點小心。