gpt4 book ai didi

sql - SAS : data steps versus proc sql

转载 作者:行者123 更新时间:2023-12-02 09:35:44 27 4
gpt4 key购买 nike

所以我开始对sas有点熟悉了,我意识到我学到的很多对数据集进行的操作也可以使用proc sql语句来完成,包括合并、创建变量、子集化等等。

因此,我的问题是:“什么时候最好做什么?”,proc sql 更好吗?总是 ?哪个最快,哪个消耗内存更少?

请注意,我可能预计答案是“这取决于”,在这种情况下我想知道什么。

最佳答案

如果您执行以下步骤:

data temp_new;
set temp;
run;

proc sql;
create table temp_new as
select *
from temp;
quit;

你会发现没有什么区别。但有很多。我将仅介绍特性功能、数据步骤可以做什么以及 proc sql 可以做什么。

数据步骤可以:

  • 使用循环;
  • 从文件输入。
  • 使用 open、fetch、fetchobs 语句循环数据。
  • 使用putLog/put输出到日志/文件;
  • 使用first、last、retain语句控制数据流。 _n__error_ 和其他变量。
  • 在单个 dataStep 中输出到不同的表。
  • 输出语句控制向数据集添加多少记录。
  • 在数据步骤中使用哈希。
  • 使用数组
  • 强制停止阅读
  • 合并/设置时,除内存外,输入数据集的数量没有限制。 (在SAS 9.1 in SQL中:一次可以join的最大表数是32个,不知道后面的SAS版本有没有改变)
  • 基本上复杂的业务逻辑更容易与数据步骤处理合并。

Proc sql 可以:

  • 使用分组和排序;
  • 使用内部 SQL。
  • 集合运算(并集/外并集/相交/异常(exception))。
  • 执行内/外连接而不对数据进行排序。
  • 对插入/删除/更新操作使用完整性约束。 (我不涉及修改/更新语句的数据步骤)。
  • 直接访问 DBMS。

另一个很大的区别是数据步骤和 proc sql 如何处理数据集。
数据步骤顺序读取记录以编程数据向量,然后对其进行一些处理并将其输出到数据集。 http://support.sas.com/documentation/cdl/en/basess/58133/HTML/default/viewer.htm#a001290590.htm

而 proc sql 将所有内容放入内存或实用程序文件中(如果内存不够),并在内存中进行所有计算和连接。之后它将所有数据写入数据集。

我基本上都用它们。 Proc sql 在执行某些需要插入、更新或删除小部分数据的操作时效率很高。例如,您想要向具有 1KK 条记录的数据集添加一条记录。在这种情况下,您将不会使用数据步骤(您可以使用 proc 附加替代方案)
如果我需要与大表进行许多连接,我更喜欢使用数据步骤合并/过程排序组合或其他技术(例如将一个数据集放入数组,使用散列或使用格式)来完成此操作,因为它在时间上不是那么痛苦。

关于sql - SAS : data steps versus proc sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26489642/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com