【问题标题】:How can I assign libname to WORK Data Library in SAS?如何将 libname 分配给 SAS 中的 WORK 数据库?
【发布时间】:2015-06-25 13:02:25
【问题描述】:

我们有一个企业指南项目,其中有多个流程。 每个流程的输出都保存到名为“SAVE”的特定库中,由 LIBNAME 语句定义。这样做是为了让我们可以更轻松地跳转和处理任何流程,而无需运行所有上述流程(当然,使用 LIBNAME 语句初始化 SAVE 库的流程除外)。

但是,当我们想在 PRODUCTION 服务器上运行此代码时,我们希望此 SAVE 库指向 SAS WORK 数据库,因为我们不需要此中间数据​​。

是否可以使用 LIBNAME 语句将库定向到 WORK 数据库(例如“LIBNAME SAVE SAS.WORK;”)?

【问题讨论】:

    标签: sas enterprise-guide


    【解决方案1】:

    定义一个 libref 使用 LIBNAME 语句。要查找现有 libref 使用的路径,请使用 PATHNAME() 函数。

    libname save %sysfunc(quote(%sysfunc(pathname(work)))) ;
    

    小心使用这个技巧,因为 SAVE.memname 和 WORK.memname 现在将引用同一个物理文件。由于名称冲突,在您的开发环境中运行的代码可能无法运行。

    【讨论】:

    • 使用双引号文字比将 quote() 函数包装在 %sysfunc() 调用中更简单。这将变成:libname save "%sysfunc(pathname(work))";.
    • 你好汤姆,关于你的评论,所以,只要我注意我在 WORK.* 库中命名的所有数据集不会与 SAVE.* 库发生冲突,我应该没问题。
    • 对。在 SAVE 与 WORK 不同的开发环境中,您可以创建数据集 SAVE.X,它与数据集 WORK.X 不同。如果您稍后在您的程序中引用 WORK.X,则代码的工作方式可能会有所不同,因为当您创建 SAVE.X 时,您会重写任何现有的 WORK.X 数据集。
    • LIBNAME 语句可能不需要 QUOTE() 函数,但仍有许多 DOS 命令无法处理带有嵌入空格的未引用路径。因此,包含路径的宏变量经常会包含引号。在这些情况下,QUOTE() 函数调用确保嵌入的引号正确加倍。
    【解决方案2】:

    好的,我找到了办法。

    %let workLocation=%sysfunc(getoption(work));
    libname SAVE "&workLocation.";
    

    还有更简单的解决方案:

    libname SAVE (work);
    

    【讨论】:

      【解决方案3】:

      您可以做的一件事是重新分配 WORK 库,使其指向您的 SAVE 库所在的位置。

      在这里,在第 1 点中,他们解释了如何做到这一点:https://riskopedia.wordpress.com/2007/03/06/reassign-location-on-sas-work-folder/

      【讨论】:

      • 确实这是一个很酷的想法,这样我们就委托 SAS 来处理(删除)最后存储在 SAVE libref 上的任何内容。唯一的问题是,我们需要定义一些可以保存它的临时文件夹,因此我们将在生产服务器上创建额外的(垃圾)文件夹,这对于这种特殊情况是不可行的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 2013-09-05
      • 1970-01-01
      相关资源
      最近更新 更多