Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何高效地读取大型sas数据集_Sas - Fatal编程技术网

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

如何高效地读取大型sas数据集,sas,Sas,我有一个大约8千兆字节的sas数据集。我想知道是否有一种简单的方法可以在数据步骤中读取此数据集。完成数据步骤大约需要2小时。具体时间和性能取决于您的硬件。不过,有一些提示 选项压缩=是将压缩数据集,从而可能节省大量空间(取决于数据)选项压缩=字符是另一个合适的选项 限制读取数据的次数。编写程序时,不需要太多的数据传递。考虑使用视图,以及在使用诸如格式或散列而不是排序和连接等技术组合数据集时, 使用PROC PRINT查看数据,而不是浏览数据集,因为您可以更有效地自定义结果 如果您在服务器上考虑

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

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

  • 选项压缩=是
    将压缩数据集,从而可能节省大量空间(取决于数据)<代码>选项压缩=字符是另一个合适的选项
  • 限制读取数据的次数。编写程序时,不需要太多的数据传递。考虑使用视图,以及在使用诸如格式或散列而不是排序和连接等技术组合数据集时,
  • 使用
    PROC PRINT
    查看数据,而不是浏览数据集,因为您可以更有效地自定义结果
  • 如果您在服务器上考虑<代码> SPDE < /代码>引擎。这允许您将数据分散到多个磁盘上
Joe的回答和其他到目前为止的评论直接回答了这个问题——它们很好地涵盖了提高阅读速度的方法。然而,我认为还值得一提的是一些减少实际需要读取的记录数量的潜在方法,因为这也会加快每次传递的速度

这必然是一个推测性的答案,但根据您的代码所做的,其中一些可能值得进一步研究

索引

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

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

Obs和firstobs

如果您只对数据集中某个特定位置的观测值感兴趣(例如,从观测值10000到观测值20000,包括10000),则可以通过obs=和firstobs=选项(在本例中,通过obs=20000和firstobs=10000)直接跳到这些观测值,忽略所有其他观测值

分类依据


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

定义“高效”供您使用。是否要优化速度、最小内存使用、最小cpu使用、最小磁盘/网络IO等?我希望数据步骤在10分钟内完成。理想情况下,我希望压缩数据集。我正在测试一个程序,因此我必须多次重新读取数据。此外,当滚动浏览大型数据集时,会出现延迟。您可以链接到“sas数据”的定义吗?此外,您是否可以在数据到达软件之前对其进行预处理(拆分、解析等)?您是从网络还是从磁盘读取数据?你有没有分析过你的软件以确定瓶颈在哪里?你能给我们一个你的代码在做什么的例子吗?如果你不知道自己在做什么,就很难提出建议。这些都是好的建议。还值得注意的是,可能获得的最大优势是压缩输入和输出数据集。这将减少与读取数据并将其写回磁盘相关的磁盘I/O—这是涉及到的最慢的进程。此外,还要确保您正在写入的驱动器上有足够的可用空间。如果不想使用压缩选项,还可以确保具有适当的列宽-这将产生与压缩数据类似的影响应该是系统的默认设置,除非它有足够的RAM来存储会话中使用的所有数据-它几乎总是有帮助的,至少有一点,除非你正在做一些CPU严重受限的事情。与现在的存储相比,CPU的速度是如此之快,以至于您不会发现压缩的CPU开销会给您带来很大的成本。