永久保存修改后的数据集

permanently save modified dataset

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

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

所以我明白,通过阅读这篇文章:https://support.sas.com/documentation/cdl/en/basess/58133/HTML/default/viewer.htm#a001310720.htm我必须将清理后的数据集输出到一个非临时目录。

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

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

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

PROC PRINT DATA=PROJECT.FAA_ALL;
RUN;

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

有人能告诉我哪里错了吗?

你的问题是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 正在启动创建空白数据集的数据步骤。

其他值得一提的事情:您的数据步骤没有按照您的预期执行,因为您没有设置语句。您的代码相当于:

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

DATA PROJECT.FAA_ALL;
 SET _NULL_;
RUN;

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

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

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 的回答)几乎总是比仅使用数据步骤移动数据更快、更有效。