1

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

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

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

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

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

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

PROC PRINT DATA=PROJECT.FAA_ALL;
RUN;

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

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

4

2 回答 2

4

你的问题是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是开始一个创建空白数据集的数据步骤。

于 2017-09-28T15:39:35.173 回答
2

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

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

于 2017-09-29T02:56:38.397 回答