如何提取大型SAS文件?
我有一个庞大的普查数据集,包含20044425个观测值和35个变量。我正试图使用如何提取大型SAS文件?,sas,Sas,我有一个庞大的普查数据集,包含20044425个观测值和35个变量。我正试图使用mylib语句将其放入工作文件夹。我感兴趣的特定变量是一个名为DISTRICT的数字变量。但是,将其从计算机中的“我的”文件夹提取到SAS中的“工作”文件夹需要非常长的时间 我尝试提取特定地区的案例我对使用以下代码感兴趣 libname pop "\\Client\C$\Users\lakna\Desktop\SA data"; data mydata; set pop.Sapop (where=(DISTRICT=
mylib
语句将其放入工作文件夹。我感兴趣的特定变量是一个名为DISTRICT
的数字变量。但是,将其从计算机中的“我的”文件夹提取到SAS中的“工作”文件夹需要非常长的时间
我尝试提取特定地区的案例
我对使用以下代码感兴趣
libname pop "\\Client\C$\Users\lakna\Desktop\SA data";
data mydata;
set pop.Sapop (where=(DISTRICT=3));
run;
然而,这仍然需要非常长的时间。它花费了超过15分钟的实时时间,我仍然无法将它从库中提取到工作文件夹
有没有更有效的方法提取大文件?要使提取速度稍快一些,您可以复制数据集,然后对其进行处理。当您使用复制过程时,它不会读取所有数据,而是将其分块移动,因此它应该非常简单
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$是本地路径
- 从您的普查数据提供商处获取较小的数据
options nocenter的输出;ods清单;proc contents data=sashelp.class varnum;跑dm‘输出’代码>其他34列中的某些列可能是非常宽的字符列,这可能导致写入时间比预期的要长。pop表可能位于网络文件夹或SAS/Share libref上;两者都需要通过网络传输。如果您只提取少量短变量,并且设置了全局选项compress=yes
,则有时最好在data
语句上设置显式compress=no
。SAS使用的行级压缩的开销会使狭窄的数据集在大小上膨胀。我会质疑额外的过程拷贝在这里是否特别值得,除非用于工作
库的存储区域明显快于pop
库的存储区域,您复制的数据集随后被多次读取。@user667489一般来说,工作库中的东西处理得更快,主要是因为它是本地的。“复制”会将其分块移动,因此根据我的经验,总的来说,这确实大大加快了处理速度。它会在所有情况下都起作用吗?不会,但对于OP在这里所说的,我认为它会起作用。