5

当我启动一个do-file以将do-file的路径恢复为变量时,是否有可能?

我正在与合著者共享一个项目(通过 Dropbox)。因此,两侧的文件夹结构(数据、日志等)是相同的。

但是这些文件夹在我的合著者的文件系统和我的文件系统上是不同的。因此,编写与文件夹路径等无关的 do-file 对我们很有帮助。

我们希望我们的项目路径不被硬编码。

谢谢!

4

3 回答 3

5

你可以在这个领域做各种各样的事情,包括

  • 将目录的名称作为参数传递给 do-file。例如,

    do mydo d:/myproject/data1812 
    

    启动文件mydo.do并将特定目录的参数传递给do-file。在 do-file 中,您可以将参数作为

    local myfolder "`1'" 
    

    即传递的东西作为本地宏1传递。(任何其他参数都是本地宏2、3等)

  • 确保您对位置的引用,特别是文件在 do-file 中是相对的,并从父目录运行 do-file。

  • 在您的主 do 文件中使用全局宏作为位置,然后在您首先运行的主 do 文件中重新定义它们。

注意:最好使用正斜杠,即使在 Windows 下也是如此;Stata 会翻译。此外,如果有嵌入的空格,请将整个内容用双引号括起来。

  do mydo "d:/my project/data1812" 

第二个似乎最接近您在特定位置不布线的偏好。但是如果你使用来自不同地方的文件,你必须以某种方式告诉 Stata 它们在哪里......

于 2013-02-12T15:16:54.707 回答
4

尼克上面的评论给出了答案:c(pwd)。这为您以后的命令提供了一个相对的起点,例如在data文件夹中打开一个数据集:

use `c(pwd)'/data/yourdata, clear

您的问题可能是双击 do-file 不会导致 Stata 将工作目录设置为其文件夹(而它对数据集设置,这不一致且不一定有用)。

profile.do该问题没有特定的解决方案,除非可能通过在启动时通过您的 Stata 应用程序文件夹中的文件将您的项目文件夹路径写入全局宏集。

我教学生班级,并让他们使用这样的系统设置他们的工作目录。它工作正常。

于 2013-02-13T00:41:03.030 回答
2

Stata中的文件路径

几年过去了,但答案还是一样:没有直接的方法可以确定当前 do-file 的位置。围绕这个话题的讨论已经在Statalist上多次提出。你可以在这里找到很多有用的提示(只是一个简短的概述,更多关于 Statalist 的讨论):

除了那些和尼克考克斯和神父。答案,我为 Stata 中的协作工作提出了我的简陋解决方案(在 Windows 和 Linux 上的不同机器上工作)。它不需要额外的模块,仅取决于您在文件夹中组织材料的方式。

提示 1。cd 到您的工作目录并带有提示 -cap- 并将 -cd- 代码保留在 do-file 的开头:

cap cd "W:\Bonds\"                                                  //Collaborator 1
cap cd "C:\Users\StataUser\Desktop\ProjectForBonds\"                //Collaborator 2
cap cd "/media/DATA/work_materials/Dropbox/MyProjects/Bonds/"       //Collaborator 3: Linux machine
cap cd "D:/work_materials/Dropbox/MyProjects/Bonds/"                //Collaborator 3: PC
cap cd "E:/Projects/Dropbox/MyProjects/Bonds/"                      //Collaborator 3: Laptop

-cap-如果目录不存在,则避免可能的错误,因此每个用户都将进入他自己的项目工作目录。在 -cd-ing 到该目录之后,您可以将路径保存为全局变量并在代码中进一步使用它(如果有必要):

global cdpath = "`c(pwd)'"
di "$cdpath"                                    //show current folder
di `"{browse `"$cdpath"':Current folder}"'      //optional: click to open the folder in the explorer

提示:正如尼克考克斯所说,使用“/”而不是“\”。当您将“\”与全局/局部变量结合使用时,Stata 会将其视为与转义符号的组合(以便能够在字符串中使用 ` 和 $ 等符号),因此使用“\”可能会破坏您的浏览策略。通过此代码检查它:

global cdpath = "`c(pwd)'"
di "$cdpath"
local i = 1
cap noi use "$cdpath\`i'\auto", clear
cap noi use "$cdpath/`i'/auto", clear

提示 2。通过在 Stata 中创建目录来保持相同的文件夹结构:

cap mkdir "./Temp"
cap mkdir "./Graphs" 

where"."表示当前工作目录。因此,您在工作目录中创建“Temp”和“Graphs”文件夹。在那里您可以存储临时数据集、放置图表等。如果目录存在,您无需担心:-cap-缓解此问题。

提示 3。在保存/打开/删除文件(数据、图表、日志等)时,明确告诉 Stata 使用相对路径:

use "./SourceData", clear 
graph export "./Graphs/RollingBond.png", as(png) replace
save "./Temp/Years.dta", replace
save "./FinalBond.dta", replace
cap erase "./Temp/Years.dta"

Stata 会知道您仍在根文件夹中,并且相对于该文件夹工作。当然,您可以像这样编写完整路径:

save "$cdpath/Temp/FinalBond.dta", replace

这些技巧适用于 Windows 和 Unix,并且只需要为新用户编写-cap cd "..."-. 当您或您的合作者使用拇指驱动器工作并且无法访问计算机上的任何其他位置时非常有用。

于 2017-09-04T18:07:45.030 回答