【问题标题】:permanently save modified dataset永久保存修改后的数据集
【发布时间】:2018-03-10 09:58:53
【问题描述】:

我知道这是一个非常基本的问题,但是当我尝试运行通过帮助文档找到的内容时,我的代码一直失败。

到目前为止,我一直在 .WORK 目录中运行一个分析项目,据我所知,每次会话结束时,该项目都会被清除。我已经完成了大量的数据清理和准备工作,不想每次在开始分析之前都这样做。

所以我了解到,通过阅读以下内容:https://support.sas.com/documentation/cdl/en/basess/58133/HTML/default/viewer.htm#a001310720.htm 我必须将清理后的数据集输出到非临时目录。

到目前为止我已采取的步骤: 1)创建了一个名为“Project”的新库 2)将其保存在我在SAS“我的文件夹”下的文件夹中 3)我将清理后的数据集保存到“项目”库的代码如下:

PROC SORT DATA=FAA_ALL NODUPKEY;
BY GROUND_SPEED;
DATA PROJECT.FAA_ALL;
RUN;

然后我在一个新程序中运行这段代码:

PROC PRINT DATA=PROJECT.FAA_ALL;
RUN;

它说没有观察结果,并且数据集基本上是空的。

谁能告诉我哪里出错了?

【问题讨论】:

    标签: sas directory dataset permanent


    【解决方案1】:

    你的问题是PROC SORT

    PROC SORT DATA=FAA_ALL NODUPKEY;
    BY GROUND_SPEED;
    DATA PROJECT.FAA_ALL;
    RUN;
    

    应该是

    PROC SORT DATA=FAA_ALL OUT= PROJECT.FAA_ALL NODUPKEY;
    BY GROUND_SPEED;
    RUN;
    

    DATA PROJECT.FAA_ALL 正在启动创建空白数据集的数据步骤。

    【讨论】:

    • 谢谢。这行得通。所以我从 SAS 网站上阅读了错误的帮助文章?没有提到“出局”的论点。
    • 我认为你在正确的轨道上,这只是你代码中的一个语法错误。
    【解决方案2】:

    还有一点值得一提:您的数据步骤没有达到您的预期,因为您没有 set 语句。您的代码相当于:

    PROC SORT DATA=WORK.FAA_ALL NODUPKEY;
    BY GROUND_SPEED;
    RUN;
    
    DATA PROJECT.FAA_ALL;
     SET _NULL_;
    RUN;
    

    PROJECT.FAA_ALL 为空,因为没有读入任何内容。

    SORT 过程隐式地对数据集就地进行排序。您可以通过将 set 语句添加到您的数据步骤让 SAS 移动已排序的数据:

    PROC SORT DATA=WORK.FAA_ALL NODUPKEY;
    BY GROUND_SPEED;
    RUN;
    
    DATA PROJECT.FAA_ALL;
     SET WORK.FAA_ALL;
    RUN;
    

    但是,这仍然需要两个步骤,并且需要额外的磁盘 I/O。在 SAS 过程中使用 out 选项(如 DomPazz 的回答)几乎总是比仅使用数据步骤移动数据更快、更有效。

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 2021-09-14
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2011-05-18
      相关资源
      最近更新 更多