2014-01-28 554 views
2

今天我對此感到困惑 - 可以使用do-file中的命令動態設置Stata中的工作目錄?例如(在PC機上至少),你可以設置基於文件的位置,在命令行的目錄使用運行:Stata - 返回文件路徑或do-file位置的命令

%cd% 

因此,一個命令,如在批處理開始以下文件會自動將目錄設置爲保存批處理文件的位置:

cd %cd% 

這對於用戶來說非常合適。有沒有辦法對do-file做相同的處理(檢測/輸出到本地變量是打開的do-file在運行它的機器上保存的位置)?這個想法是讓下面,它可以檢測當多個用戶同步到網盤文件夾和文件路徑特別正確的用戶路徑的平滑的版本是不一樣的跨用戶:

#delim ; 
if "`c(username)'"=="Steve" { ; cd "C:/Users/Steve/Documents/My Dropbox/ProjectName/" ; }; 
else if "`c(username)'"=="otherperson" {; cd "/Users/otherpersonusingmac/ProjectName/";}; 
else if "`c(username)'"=="anotherperson" {; cd "/anotherpersonsDropboxfilepath/ProjectName/";}; 
# delim cr ; 

謝謝!

+1

您可能對此主題感興趣:http://www.stata.com/statalist/archive/2013-07/msg00646.html。也許您可以通過'shell'命令找出某些東西。 –

回答

1

我不認爲有一個步驟的解決方案,但可以將全局宏定義添加到每臺機器上的profile.do文件。例如,將以下內容添加到您的profile.do文件。

global DROPBOX "C:/Users/richa_000/Dropbox" 
global SKYDRIVE "C:/Users/richa_000/SkyDrive" 

然後在您的腳本中使用這些宏到cd

. cd $DROPBOX 
C:\Users\richa_000\Dropbox 

. cd $SKYDRIVE 
C:\Users\richa_000\SkyDrive 

在每臺機器的profile.do文件中指定正確的路徑。

+0

I謝謝!現在,讓大家在他們的機器上做這個... – SOConnell

-1

推測do文件位於當前工作目錄中。如果是這樣,你可以保存creturn值c(PWD)到本地或全局宏,你可以調用:

全球currentdir " C(PWD)「'

使用$ currentdir/mydata.dta ,清除