【问题标题】:The processing of large data sets in sassas中大数据集的处理
【发布时间】:2018-03-27 19:02:59
【问题描述】:

我正在寻找如何在 sas 中加快处理大型数据集的解决方案或想法。

你会推荐什么?

什么是更好的数据步骤或proc sql过程?

【问题讨论】:

  • 具体是做什么处理的?大量查询、计算等?您在处理关系数据库吗?
  • 您的开端不错,但如果您能提供更多信息会很有帮助。
  • 我会投票赞成你的问题,因为它仍然足够通用,可以帮助其他 sas 初学者解决同样的问题。

标签: sas


【解决方案1】:

加快数据处理速度取决于数据的保存位置。

您的数据可以位于:

  • SAS 表,
  • 数据库表(Miscrosfot SQL、Oracle、DB2、MYSQL、.. 等)

在以下情况下使用 SAS 数据步:

  • 您正在查询/处理 SAS 表,
  • 你想做迭代 处理(例如保留值或使用数组)。

在以下情况下使用 Proc SQL:

  • 您正在查询一个大型数据库表,
  • 您可以在发送 SQL 代码的地方执行 SQL“传递” 在数据库服务器上执行,只有输出被发送到 SAS(而不是 将整个表通过网络传送到 SAS,然后对其进行过滤),

  • 您想要查询 SAS 表,但更喜欢 SQL 联接而不是数据步骤合并。

您应该考虑的另一个主题是效率编程;您在哪里优化查询和查找。

【讨论】:

    【解决方案2】:

    我发现 Proc SQL 更适合我的用例。我们可能需要更多关于您尝试加入/导出的数据的大小和种类等细节。

    请给我们一些这方面的信息,我们会尽力提供帮助。

    提示: 限制你拉过来的领域 子集数据

    【讨论】:

      【解决方案3】:

      根据我的经验,Proc SQL 似乎更快。

      以下是使用Proc SQL 加快查询速度的两个技巧:

      一般来说,您希望在查询时排除尽可能多的数据。如果您使用Proc SQL,则 where 子句中的限制顺序很重要。把最严格的部分放在第一位。

      例如,如果我要在数据库中查询 2005 年 1 月之后聘用的姓“JONES”的教师,我会像这样构建我的 where 子句:where last_name = 'JONES' and hire_date > 200501 我会这样做,因为姓氏是可能会排除比雇用日期限制更多的记录。

      如果可能,请不要使用Select *,而是列出您需要的特定列。请记住,即使您正在使用列进行计算,也不必在 select 语句中包含该列。

      这是了解如何有效使用proc sql 的非常有用的资源。如果您在 SAS 中处理大量数据集,我建议您完整阅读它。

      http://www2.sas.com/proceedings/sugi29/127-29.pdf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        • 2017-09-24
        • 2019-12-27
        相关资源
        最近更新 更多