如何提取大型SAS文件?

如何提取大型SAS文件?,sas,Sas,我有一个庞大的普查数据集,包含20044425个观测值和35个变量。我正试图使用mylib语句将其放入工作文件夹。我感兴趣的特定变量是一个名为DISTRICT的数字变量。但是,将其从计算机中的“我的”文件夹提取到SAS中的“工作”文件夹需要非常长的时间 我尝试提取特定地区的案例我对使用以下代码感兴趣 libname pop "\\Client\C$\Users\lakna\Desktop\SA data"; data mydata; set pop.Sapop (where=(DISTRICT=

我有一个庞大的普查数据集,包含20044425个观测值和35个变量。我正试图使用
mylib
语句将其放入工作文件夹。我感兴趣的特定变量是一个名为
DISTRICT
的数字变量。但是,将其从计算机中的“我的”文件夹提取到SAS中的“工作”文件夹需要非常长的时间

我尝试提取特定
地区的案例
我对使用以下代码感兴趣

libname pop "\\Client\C$\Users\lakna\Desktop\SA data";
data mydata;
set pop.Sapop (where=(DISTRICT=3));
run;
然而,这仍然需要非常长的时间。它花费了超过15分钟的实时时间,我仍然无法将它从库中提取到工作文件夹


有没有更有效的方法提取大文件?

要使提取速度稍快一些,您可以复制数据集,然后对其进行处理。当您使用复制过程时,它不会读取所有数据,而是将其分块移动,因此它应该非常简单

  • 使用PROC Copy复制数据
  • 从工作中筛选数据集
  • 添加KEEP=仅保留所需的变量,这些变量将减小文件的大小
  • >P>如果您经常使用此文件,请考虑在常用变量上添加索引,以筛选和/或使用压缩选项来减小大小。p>
    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;
    
    libname pop“\\Client\C$\Users\lakna\Desktop\SA data”;
    过程复制输入=弹出=工作;
    选择SAPOP;
    跑
    数据mydata;
    设置sapop(其中=(地区=3)保持=地区);
    跑
    

    在文件服务器上,数据集的内容在应用where子句之前(通过libname引擎)传输到SAS会话计算机

    有一些不同的方法可以加快切割速度

    • 将整个Sapop数据集移动到本地计算机
    • 让它在文件服务计算机上安装SAS,以便share\Client\C$是本地路径
    • 从您的普查数据提供商处获取较小的数据

    pop的libname语句是什么。请显示
    options nocenter的输出;ods清单;proc contents data=sashelp.class varnum;跑dm‘输出’其他34列中的某些列可能是非常宽的字符列,这可能导致写入时间比预期的要长。pop表可能位于网络文件夹或SAS/Share libref上;两者都需要通过网络传输。如果您只提取少量短变量,并且设置了全局选项
    compress=yes
    ,则有时最好在
    data
    语句上设置显式
    compress=no
    。SAS使用的行级压缩的开销会使狭窄的数据集在大小上膨胀。我会质疑额外的过程拷贝在这里是否特别值得,除非用于
    工作
    库的存储区域明显快于
    pop
    库的存储区域,您复制的数据集随后被多次读取。@user667489一般来说,工作库中的东西处理得更快,主要是因为它是本地的。“复制”会将其分块移动,因此根据我的经验,总的来说,这确实大大加快了处理速度。它会在所有情况下都起作用吗?不会,但对于OP在这里所说的,我认为它会起作用。