当我启动一个do文件来恢复do文件的路径作为变量时,是否可能?
我与共同作者共享项目(通过Dropbox)。因此,文件夹(数据,日志等)的结构在两侧都是相同的。
但是我的共同作者的文件系统和我的文件夹不同。因此,编写与文件夹路径无关的do-file对我们很有帮助。
我们希望我们项目的路径不会被硬编码。
谢谢!
答案 0 :(得分:4)
你可以在这个领域做各种事情,包括
将目录名称作为参数传递给do-file。例如,
do mydo d:/myproject/data1812
启动文件mydo.do
并将特定目录的参数传递给do-file。在do文件中,您可以将参数作为
local myfolder "`1'"
即。传递的东西作为本地宏1传递。(任何其他参数都是本地宏2,3等)
确保您对一般位置的引用和特定文件在do文件中是相对的,并从父目录运行do-file。
在主文件中使用全局宏作为位置,然后在首先运行的主文件中重新定义它们。
注意:即使在Windows下,最好使用正斜杠; Stata将翻译。此外,如果有嵌入空格,请用双引号绑定整个内容。
do mydo "d:/my project/data1812"
第二个似乎最接近您在特定位置不接线的偏好。但是如果你使用来自不同地方的文件,你必须告诉Stata他们在哪里......
答案 1 :(得分:4)
尼克上面的评论给出了答案:c(pwd)
。这为您以后的命令提供了一个相对的起点,例如:在data
文件夹中打开数据集:
use `c(pwd)'/data/yourdata, clear
您的问题可能是双击一个文件不会导致Stata将工作目录设置为其文件夹(虽然它对数据集有效,但不一致且不一定有用)。
除了将您的项目文件夹路径写入Stata应用程序文件夹中的profile.do
文件启动时设置的全局宏外,该问题没有特别的解决方案。
我教学生班,并让他们用这样的系统设置他们的工作目录。它运作正常。
答案 2 :(得分:1)
几年过去了但答案仍然是相同的:没有直接的方法来确定当前文件的位置。有关该主题的讨论已多次在Statalist上进行过。你可以在这里找到很多有用的提示(只是一个简短的概述,关于Statalist的更多讨论):
除了那些和尼克考克斯和神父。答案,我提出了我在Stata协作工作的简单解决方案(适用于Windows和Linux上的不同机器)。它不需要额外的模块,只取决于您如何在文件夹中组织材料。
提示1 。使用提示-cap- cd到您的工作目录,并将-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
提示:正如Nick Cox所提到的,使用“/”代替“\”。当你将“\”与全局/局部变量结合使用时,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"
其中"."
表示当前工作目录。因此,您在工作目录中创建“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 "..."-
的新用户编写。当您或您的协作者使用拇指驱动器工作且无法访问计算机上的任何其他位置时非常有用。