如何提取大型SAS文件?

时间:2018-04-08 18:02:02

标签: sas

我有一个大型人口普查数据集,其中有20044425个观测值和35个变量。我试图使用mylib语句将其转到工作文件夹。我感兴趣的特定变量是一个标题为DISTRICT的数字变量。但是,将它从计算机中的文件夹中提取到SAS

中的工作文件夹需要很长时间

我尝试使用以下代码

提取我感兴趣的特定DISTRICT的案例
libname pop "\\Client\C$\Users\lakna\Desktop\SA data";
data mydata;
set pop.Sapop (where=(DISTRICT=3));
run;

然而,它仍然需要很长时间。它花了15分钟的实时时间,而我仍然无法从库中将其提取到工作文件夹中。

是否有更有效的方法来提取大文件?

2 个答案:

答案 0 :(得分:1)

在文件服务器上,数据集的内容正在(通过libname引擎)传输到SAS会话机器,然后才能应用where子句。

获得更快切割的一些不同方法是

  • 将整个Sapop数据集移动到本地计算机
  • 让IT在文件服务计算机上安装SAS,以便共享\ Client \ C $是本地路径
  • 从人口普查数据提供者那里获得较小的削减

答案 1 :(得分:0)

为了使速度稍快一些,您可以复制数据集然后进行处理。当您使用COPY过程时,它不会读取它在块中移动的所有数据,因此它应该非常简单。

  1. 使用PROC COPY复制数据
  2. 从WORK
  3. 过滤数据集
  4. 添加KEEP =以仅保留您需要的变量,这将减少文件的大小。
  5. 如果您经常使用此文件,请考虑在常用变量上添加索引以过滤和/或使用COMPRESS选项来减小大小。

    libname pop "\\Client\C$\Users\lakna\Desktop\SA data";
    
    proc copy in=pop out=work;
    select SAPOP;
    run;
    
    data mydata;
    set sapop (where=(DISTRICT=3) KEEP = DISTRICT <list of variables>);
    run;