所以我开始熟悉sas,并且我意识到我学习使用数据集进行的大量操作也可以使用 proc sql语句完成,包括合并,创建变量,子集和许多其他。
我的问题是:“什么时候最好做什么?”,proc sql更好吗?永远?哪个是最快的,哪个内存消耗更少?
请注意,我可能预期答案是“它取决于”,在这种情况下我想知道什么。
答案 0 :(得分:4)
如果您采取措施:
data temp_new;
set temp;
run;
和
proc sql;
create table temp_new as
select *
from temp;
quit;
你会发现没有区别。但是有很多。我将仅介绍功能功能,使用数据步骤可以执行的操作以及使用proc sql可以执行的操作。
数据步骤可以:
_n_
,_error_
和其他变量。Proc sql可以:
另一个很大的区别是数据步骤和proc sql如何与数据集一起使用
数据步骤按顺序读取记录到程序数据向量,然后对其进行一些处理并将其输出到数据集。 http://support.sas.com/documentation/cdl/en/basess/58133/HTML/default/viewer.htm#a001290590.htm
虽然proc sql将所有内容放入内存或实用程序文件(如果内存不足),并且在内存中进行所有计算和连接。之后,它将所有数据写入数据集。
我基本上都使用它们。 Proc sql在执行某些操作时很有效,这需要插入,更新或删除一小部分数据。例如,您想要将一条记录添加到具有1KK记录的数据集中。在那种情况下你不会使用数据步骤(你可以使用proc附加替代)
如果我需要很多与大表的连接,我更喜欢使用数据步合并/ proc排序组合或其他技术(比如将一个数据集放入数组,使用散列或使用格式),因为它不会那么痛苦。 / p>
答案 1 :(得分:1)
proc sql更好吗?
不 - 只是不同。
哪个最快?
两者都没有 - 通过SQL执行相同的步骤通常需要与通过datastep执行相同的时间。通过将典型数据步骤更改为典型的SQL查询,您不太可能看到明显的速度差异。
哪个内存消耗较少?
他们可能大致相同,为了确定,请使用option fullstimer;
,它会在日志窗口中为您提供与以下内容类似的注释:
NOTE: PROCEDURE SQL used (Total process time):
real time 10.69 seconds
user cpu time 1.62 seconds
system cpu time 0.06 seconds
memory 958.25k
OS Memory 16328.00k
Timestamp 10/21/2014 08:35:26 AM
什么时候最好做什么?
使用使代码最易被其他人阅读并且可维护的方法。
我能想到的一件事我几乎总是使用proc sql
,因为我需要使用不同的连接条件为每个数据集合并(即连接)多个数据集。数据步骤不能简单地在一个步骤中完成此操作,而在proc sql
中则非常简单。
答案 2 :(得分:0)
关于你想要实现的目标。在不知道你想要实现什么的情况下,这个问题无法回答。请记住,SAS语言已经发展了数十年.SAS努力确保向后兼容性#39;因此有许多东西可用于遗留目的。
例如,当出现新内容(如SQL)时,SAS不会停止支持基于数据步骤运行程序的客户。
SAS语言与SQL语法分开存在,并且再次与其他语言(例如DS2,C ++或JAVA)分开,所有这些语言都可以嵌入SAS中,并且可以执行许多相同的操作。