我们在Stata进行研究,是一个由几位研究人员组成的变革团队。在当前项目中,我们有来自多个波的数据,为此我创建了不同的do文件来清理原始数据,并合并波。我将所有这些放在一个文件夹中,这样文件夹“Data”包含子文件夹“Wave1”,“Wave2”等,并且每个文件夹包含几个数据文件夹(例如,原始数据,干净数据等)。 )。
每个wave都以相同的方式组织。由于文件夹结构是线性的,我可以在“数据”中有一个主文件,灵活地读出计算机目录(cd“`c(pwd)'/”),这样对于后续文件的所有调用我只是添加子文件夹(例如使用“Wave 1 / Raw data / x.dta”)。这样,每次他们使用机器上的文件时,我都会避免团队中的人员更改目录。
如果我有一些项目,我的文件夹“Data”只在其中一个:如何告诉我的分析文件夹“Project2”文件中的主文件位于子文件夹中它的兄弟“Project1”(例如“Project1 / Data /”)没有它知道计算机的根目录(为了使它在我们所有的计算机上都灵活)?
我尝试了使用cd ../
的简单解决方案,但是:
cd "`c(pwd)'/"
cd ../
do "Project1/Data/y.do"
没有帮助,因为当我多次运行do-file时,它会上升到目录路径,因为它似乎记住了它首次读入的路径并且每次都在其上执行cd ../
。因此,在第一次运行时一切正常,在第二次运行时,它会在层次结构中的一个文件夹中结束,等等。
有没有办法删除do文件开头的目录内存?还是其他任何方式?我找不到任何东西。然而,它似乎很简单。
答案 0 :(得分:1)
我没有对此有一个奇特的答案,但也许是一个功利主义的答案。你可以在do文件的顶部添加一行代码:
local home "C:\folder\folder"
do "`home'\Project1\Data\y.do"
并且您团队的每个成员都可以设置自己的本地本地宏,这样您就可以定义自己的根目录。
答案 1 :(得分:1)
我使用fastcd
来解决此问题,并发现它比在每台计算机上使用不同的本地/全局变量更容易。
在Stata中输入ssc install fastcd
以安装fastcd
包,然后输入help fastcd
。该包名为fastcd
,但实际的用户编写程序名为c
。
在每台计算机上,用户应将工作目录更改为项目根目录(Project1
,Project2
的父目录等)。然后他们应该为该目录提供一致的名称。
* Change the working directory to
* the project root directory.
cd ...
* Use -c cur- to give the directory a name.
c cur myproject
* Now you can use -c- to return to that directory at
* any time.
c myproject
* To change the working directory to Project1:
c myproject
cd Project1
现在,您的所有文件都可以使用c
而不是cd
。用户只需将目录与fastcd
代码关联一次,这应该是所需的全部配置。