【问题标题】:SAS EG - Individual Datasets split by date vs Single appended dataset containing all datesSAS EG - 按日期拆分的单个数据集与包含所有日期的单个附加数据集
【发布时间】:2021-03-28 01:04:36
【问题描述】:

这主要是关于效率的问题,因为我不熟悉 SAS 如何处理数据集。我运行的许多代码从具有连续日期的多个数据集中读取(这是否是连续的月/季度/年取决于数据集)。

目前,代码每次运行时都需要手动更新,以确保它们选择正确的日期,所以我会有如下内容:

Data Quarters;
Set XYZ_201803
    XYZ_201806
    ...
    ...
    XYZ_202006;
Run;

为了帮助整理代码并使其不那么乏味,我提出了一些不同的想法,并提出了一些想法,其中一个重要想法是将所有 XYZ_YYYYMM 数据集存储为一个数据集,附加数据集,因此可以使用以下日期的简单过滤器读取它们:

Data Quarters;
Set AppendedData;
Where Date > 201812;
Run;

就计算而言,这两个选项中哪一个更有效?在通常大小为几 GB 的数据集上,您会推荐哪个?每个想法还有哪些其他优点和缺点?

感谢您的任何意见。 :)

【问题讨论】:

  • 我们使用了多种方法。我们保留一个包含最近 3 年数据的主大数据集,然后将历史数据拆分为较小的数据集。这意味着如果有人需要所有数据,它就在那里,但如果需要,他们也可以非常快速地使用大数据集。这些不是您唯一的选择 - 您还可以设计宏或动态命名,这样您就不必每次都手动更新日期。

标签: sas processing-efficiency enterprise-guide


【解决方案1】:

从性能的角度来看,一个数据集和几个单独的数据集很可能是相似的;打开新数据集有一些小的开销,但只要不是数千个,您可能不会注意到差异。

如果您通常只使用小部分,那么在创建该数据集和使用该数据集时,单个数据集的性能会受到影响。通常,单独的数据集很常见,人们通常对各个季度进行分析,而很少将它们组合起来。

最后,如果数据集的内容可能因季度而异(如果格式可能发生变化,字段可能会发生变化),那么在某些方面进行分离比管理不同时期之间的变化更容易。

也就是说,单个数据集对组织有巨大的好处,并且可以处理上述所有问题。将 SAS 数据集视为大型 SQL 表 - 它们实际上是相同的,帮助 SQL 表的相同事物可以帮助 SAS。适当的列大小、存储数据的适当排序、适当的索引都是重要的解决方案。如果您的工作地点有一个数据库团队,他们可能能够帮助构建一个理想的表计划。几 GB 的文件绝对可以从索引和适当的排序中受益,让用户轻松获得所需的位。

如果您要使用单独的数据集,则可以使用宏语言来确保您读取的是正确的数据集,前提是它们以一致的方式命名。如果还有其他原因要保持分离,这可能是理想的解决方案 - 然后每个季度都不需要更改。

【讨论】:

  • 嗨,乔,非常感谢,因为它有助于解决我的问题。我不确定这些数据是如何在我正在整理的当前评论之外使用的,所以这对我来说肯定是一个好主意。我相信,由于数据的性质,这些表按季度保持相同,因此创建单个附加表似乎是一个很好的论据。
【解决方案2】:

兴趣点:

  • 从编码的角度来看
    • 处理通过附加季度数据集创建的单个堆叠数据集效率更高。
  • 从资源的角度来看
    • 必须确保您有足够大的磁盘来容纳单个大表
    • 拥有额外的非存储空间来保存原始数据块 - 无需在主数据磁盘上堆满所有数据块。
    • 2TB SSD 速度非常快、非常便宜且功耗低,并且可以包含一个由相当多“几 GB”块组成的表。
      • 旋转磁盘的 $/TB 更低,容量更大。 I/O 会更慢并且消耗更多的电量。

为了进一步提高查询性能,您需要为BYCLASSWHERE 语句中最常用的变量编制索引。

“...简单过滤器...”是“Keep it Simple S****”(KISS)的一部分

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 2018-05-22
    • 1970-01-01
    • 2023-03-09
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多