永久保存修改后的数据集
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 的回答)几乎总是比仅使用数据步骤移动数据更快、更有效。
我知道这是一个非常基本的问题,但是我的代码在尝试 运行 我通过帮助文档找到的内容时总是失败。
到目前为止,我一直在 运行从 .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 的回答)几乎总是比仅使用数据步骤移动数据更快、更有效。