【问题标题】:Flexible, non-linear folder structure灵活的非线性文件夹结构
【发布时间】:2017-07-02 17:43:41
【问题描述】:

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

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

如果我有几个项目,而我的文件夹“Data”仅在其中一个中:我如何告诉我在文件夹“Project2”中的分析 do-file 主 do-file 位于它的兄弟“Project1”(例如“Project1/Data/”)不知道计算机的根目录(使其在我们所有的计算机上都灵活)?

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

cd "`c(pwd)'/"
cd ../
do "Project1/Data/y.do"

没有帮助,因为当我多次运行 do-file 时,它​​会上升到目录路径,因为它似乎记得它第一次读入的路径并每次都在其上执行 cd ../。因此,在第一次运行时一切正常,在第二次运行时,它最终会在层次结构中更高的一个文件夹,等等。

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

【问题讨论】:

    标签: stata directory-structure


    【解决方案1】:

    我对此没有一个花哨的答案,但也许是一个实用的答案。可以在你的 do 文件的顶部有这样一行:

    local home "C:\folder\folder"
    do "`home'\Project1\Data\y.do"
    

    您团队的每个成员都可以设置自己的本地本地宏,这将允许您每个人定义自己的根目录。

    【讨论】:

    • 感谢您的回答,埃里克!我应该更清楚:这是我们在开始使用 cd "`c(pwd)'/" 之前的默认解决方案,以使其更易于使用(并且更灵活)。我不想为了花哨而花哨。如果这是比我更有经验的人唯一的好解决方案,我会坚持下去.. ;)
    【解决方案2】:

    我使用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
    

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

    【讨论】:

    • 非常感谢,马修!我会马上检查一下。如果您不介意我已经问了,那么与以相同方式跨多个 do-file 使用全局变量相比,您的确切优势是什么?
    • 对于以后阅读本文的任何人:fastcd 并没有立即为我工作。我需要在我的“ado/personal”文件夹中手动创建 directory.txt 文件。然后它就可以正常工作了。
    • 您打算在哪里定义全局变量?就个人而言,我从来没有找到一个好地方来设置在计算机之间变化的全局变量,而主要的变化似乎是目录,fastcd 可以处理。我也喜欢fastcd,如果有新用户加入项目,则不需要对代码库进行任何更改。
    • 我外包了一个“dir”do-file,它在根目录中读取(如所述)并将其推入全局。然后,我定义了一些其他全局变量,这些全局变量将“根全局”添加到其根目录中,无论子文件夹路径是否有用。在我运行的任何一个do-file中,我只需调用“dir”do-file来读取机器特定的目录结构。现在,这在“下游”运行良好,当调用“dir”do 的 do-file 可以简单地沿文件夹层次结构向下移动时。
    • 但它的效果不太好,一旦我必须向上层次结构,例如因为我在不同的项目文件夹中(如所述)。在这种情况下,如果我使用 cd ../,我只能使用一次 do-file,并且必须在再次使用之前关闭它 - 否则每次运行时它的根目录在文件夹层次结构中会高一级该做的。希望这很清楚! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多