我有一个大约8千兆字节的sas数据集。我想知道是否有一种简单的方法可以在数据步骤中读取此数据集。数据步骤大约需要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子句处理。