Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stata 灵活的非线性文件夹结构_Stata_Directory Structure - Fatal编程技术网

Stata 灵活的非线性文件夹结构

Stata 灵活的非线性文件夹结构,stata,directory-structure,Stata,Directory Structure,我们在Stata进行研究,是一个由多名研究人员组成的不断变化的团队。在当前的项目中,我们有来自多个wave的数据,我为这些wave创建了不同的do文件来清理原始数据,并合并wave。我将所有这些放在一个文件夹中,这样文件夹“Data”包含子文件夹“Wave1”、“Wave2”等,每个文件夹都包含多个数据文件夹(例如,原始数据、干净数据等) 每个波浪都以相同的方式组织。由于文件夹结构是线性的,我可以在“Data”中有一个主do文件,它可以灵活地读取计算机目录(cd“`c(pwd)/”),因此对于后

我们在Stata进行研究,是一个由多名研究人员组成的不断变化的团队。在当前的项目中,我们有来自多个wave的数据,我为这些wave创建了不同的do文件来清理原始数据,并合并wave。我将所有这些放在一个文件夹中,这样文件夹“Data”包含子文件夹“Wave1”、“Wave2”等,每个文件夹都包含多个数据文件夹(例如,原始数据、干净数据等)

每个波浪都以相同的方式组织。由于文件夹结构是线性的,我可以在“Data”中有一个主do文件,它可以灵活地读取计算机目录(cd“`c(pwd)/”),因此对于后续do文件的所有调用,我只需添加子文件夹(例如,使用“Wave 1/Raw Data/x.dta”)。这样,我可以避免团队中的人每次使用机器上的文件时都更改目录

如果我有几个项目,我的文件夹“Data”只在其中一个项目中:我如何告诉我的文件夹“Project2”中的分析do文件,主do文件在其同级“Project1”(例如“Project1/Data/)的子文件夹中,而不知道计算机的根目录(以便在我们所有的计算机上灵活使用)

我尝试了简单的解决方案,使用
cd../
,但是:

cd "`c(pwd)'/"
cd ../
do "Project1/Data/y.do"
没有帮助,因为当我多次运行do文件时,它会沿着目录路径向上移动,因为它似乎记得它第一次读入的路径,并且每次都对它执行
cd../
。因此,在第一次运行时,一切正常,在第二次运行时,它在层次结构中位于较高的一个文件夹中,以此类推


有没有办法删除do文件开头的目录内存?还是其他方式?我什么也找不到。然而,这似乎很简单。

对此我没有一个奇特的答案,但可能是一个实用的答案。可以在do文件的顶部有一行,如下所示:

local home "C:\folder\folder"
do "`home'\Project1\Data\y.do"
您团队的每个成员都可以设置自己的本地宏,这将允许您定义自己的根目录。

我用它来解决这个问题,并发现这比在每台计算机上使用不同的本地/全局宏更容易

在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

现在,您所有的do文件都可以使用
c
而不是
cd
。用户只需将目录与
fastcd
代码关联一次,这就是所需的所有配置。

谢谢您的回答,Eric!我应该更清楚:在我开始使用cd“`c(pwd)/”之前,这是我们的默认解决方案,目的是让它更容易(更灵活)使用。我不想为了幻想而被幻想。如果这是比我更有经验的人能找到的唯一好办法,我会坚持下去非常感谢,马修!我马上去查一下。如果您不介意我已经问过您,那么与以相同方式跨多个do文件使用全局变量相比,您的确切优势是什么?对于稍后阅读本文的任何人来说:fastcd并没有立即为我工作。我需要在我的“ado/personal”文件夹中手动创建directory.txt文件。那就好了。你想在哪里定义globals呢?就我个人而言,我从来没有找到一个很好的地方来设置不同计算机之间的全局变量,而主要的变量似乎是目录,而
fastcd
可以处理这些变量。我也喜欢使用
fastcd
,如果新用户加入该项目,则不需要对代码库进行任何更改。我外包了一个“dir”do文件,该文件在根目录中读取(如所述),并将其推入全局目录。然后,我定义了一些其他全局变量,它们将“根全局变量”添加到其根目录中任何有用的子文件夹路径。在我运行的任何do文件中,我都只需调用“dir”do文件来读取特定于机器的目录结构。现在,当调用“dir”do的do文件可以简单地沿着文件夹的层次结构向下运行时,这种方法在“下游”运行得很好。但是当我必须向上运行层次结构时,这种方法效果就不太好了,例如,因为我在不同的项目文件夹中(如上所述)。在这种情况下,如果我使用cd../,我只能使用do文件一次,并且在再次使用它之前必须关闭它-否则每次运行do时,它的根目录将在文件夹层次结构中处于较高的一级。希望这是清楚的!:)