如何有效地读取大型sas数据集

时间:2014-01-26 17:10:16

标签: sas

我有一个大约8千兆字节的sas数据集。我想知道是否有一种简单的方法可以在数据步骤中读取此数据集。数据步骤大约需要2个小时才能完成。

2 个答案:

答案 0 :(得分:1)

具体时间和性能取决于您的硬件。但是,一些提示。

  • options compress=yes;将压缩数据集,从而节省了大量空间(取决于数据)。当字符数据占所用空间的大部分时,options compress=char;是另一种选择。
  • 限制您读取数据的次数。编写程序,使其不需要那么多的数据传递。考虑使用视图,以及使用格式或哈希等技术组合数据集而不是排序和连接。
  • 使用PROC PRINT查看数据而不是浏览数据集,因为您可以更有效地自定义结果。
  • 如果您在服务器上,请考虑使用SPDE引擎。这允许您将数据分布在多个磁盘上。

答案 1 :(得分:0)

Joe的回答和其他评论到目前为止直接回答了这个问题 - 他们很好地涵盖了提高阅读速度的方法。但是,我认为值得一提的是减少实际需要阅读的记录数量的一些潜在方法,因为这也会加快每次传递。

这必然是一个非常具有推测性的答案,但是根据你的代码的作用,其中一些可能值得进一步研究。

<强>索引

如果您只想在每次传递数据集时处理相对较小比例的记录(<20%),在连续传递中使用一系列相似且相当简单的where子句,您可以考虑为某些传递创建索引where子句中的变量。您感兴趣的记录比例越小,使用索引的好处就越大,因为它们将允许SAS跳过读取数据集的大部分内容。

创建索引时存在一次性初始处理开销,每次更改数据集时都会产生进一步的成本。该索引还将占用一些额外的磁盘空间。

Obs和firstobs

如果您只对数据集中特定位置的观察感兴趣(例如从观察10000到观察20000),您可以直接跳到那些并通过obs =和firstobs = options忽略所有其他位置(在这种情况下,通过obs = 20000和firstobs = 10000)。

<强> Sortedby

如果数据集碰巧按where子句中使用的变量排序,您还可以在set语句中使用sortedby =选项来加速where子句处理。

相关问题