SAS 程序删除和数据集
Posted
技术标签:
【中文标题】SAS 程序删除和数据集【英文标题】:SAS procedures Delete and Datasets 【发布时间】:2012-04-28 22:06:49 【问题描述】:我只是在学习 sas,看到了两个有趣的程序。
proc Delete data = table; run;
和
proc datasets lib=Libr nolist;
modify table;
rename __first = second;
quit;
run;
还有几个关于它们的问题:
为什么有些程序以quit
而不是run
结束?
为什么datasets
使用quit
和run
一起? (这是退出表的语句吗?)
对于小任务,最好使用datasets-procedure
吗? (当然不是,但是为了什么?或者不使用它?)
还有,哪种方法更快:proc delete
或 sql-drop
? (速度更快,需要多少数据)
【问题讨论】:
【参考方案1】:一些SAS
过程以QUIT
结尾,而不是RUN
,因为它们在Interactive Mode
中运行。例如,在PROC GLM
中,只要SAS
窗口的顶部显示PROC GLM
正在运行(如果您使用的是Windows
版本),您就可以指定额外的模型语句。
一些程序员已经养成了将QUIT
和RUN
一起输入的习惯。我认为这实际上并不重要,因为使用QUIT
语句的过程在您输入它们后立即开始运行。我只使用其中一种。
PROC DELETE
是不受支持的旧功能;它已被PROC DATASETS
正式取代,PROC DATASETS
是 SAS 中处理数据集的指定工具。 Mailing List Post.
在SAS
中,我通常不会发现自己非常需要删除数据集。因为SAS
有效地管理了它的内存使用,而且因为现在 RAM 非常充足,所以我通常 90% 的工作来自我在会话开始时按需创建的临时数据集。
-
和以前一样,
PROC DELETE
现在已弃用,取而代之的是 PROC DATASETS
。就哪个更快而言,不包括非常大的数据,我敢打赌它们之间几乎没有区别。然而,在处理永久 SAS 数据集时,我喜欢使用 PROC DATASETS
而不是 PROC SQL
,只是因为我觉得使用 SAS 设计的方法而不是 SQL
实现(不是 100% ) 在我看来。
【讨论】:
sql实现怎么不是100%? 在 SQL 中可以做一些在 PROC SQL 中不能做的事情。立即想到的是更改变量的类型。 啊,我读到drop table
在 SQL 实现中不是 100%。【参考方案2】:
WRT“运行”与“退出”:
一些 SAS 过程支持称为“运行组处理”的东西,这意味着该过程在看到“运行”时执行它被要求执行的任何工作;陈述。该过程继续执行,直到它看到“quit:”statemnet。事实上,一个“退出”;语句会自动插入一个“run;”声明是否还有工作要做。
PROC DATASETS 是这些过程之一。 “退出”;声明说程序没有更多的工作要做。考虑这个简单的例子:
proc datasets;
change a=new_a;
run;
delete new_a;
run;
quit;
第一个语句(更改)将现有数据集“a”重命名为“new_a”。第二条语句将删除该数据集。如果您没有包含“运行”;在本例中的语句(在“change”之后),该过程将失败,因为它会注意到“new_a”数据集不存在,因此不会执行任何一条语句。
也就是说,我自己很少使用 PROC DATASETS;我更喜欢使用 PROC SQL。
WRT:PROC DELETE 与使用 PROC SQL 的 DROP TABLE:
虽然 PROC DELETE 已正式“弃用”,但这意味着它将不再更改。从 SAS 库中删除数据对象是一个简单的过程;我用它所有的时间。与 PROC SQL 相比,它有一个特殊的优势。如果您使用 PROC DELETE 尝试删除不存在的数据集,您只会在日志中收到一条警告消息。但是,如果您尝试从 SQL 中执行 DROP TABLE 语句,您将收到错误并且您的 SQL 步骤将停止。在我的 ETL 脚本中创建加载到 Teradata 和 Oracle 等外部数据库的新表时,我一直使用 PROC DELETE。
啰嗦,我知道,但我希望这会有所帮助。
鲍勃
【讨论】:
【参考方案3】:关于数据集或sql在删除表时是否更快,我调查了这个问题here。 Proc SQL
通常更快,这让我很惊讶。
【讨论】:
【参考方案4】:我认为下面的代码可以删除工作库中的SAS数据集;
proc datasets lib=work memtype=data kill; 运行;
退出;
【讨论】:
【参考方案5】:相信您会发现PROC DELETE
并没有消失,也不会很快消失。此外,对于某些类型的库,它通常比PROC DATASETS ... DELETE
形式的删除更快。根据我的经验,由 SPDS 管理的包含许多数据集的数据库可能会导致任何类型的 PROC DATASETS
性能非常差,因此我将始终使用 PROC DELETE
。
【讨论】:
以上是关于SAS 程序删除和数据集的主要内容,如果未能解决你的问题,请参考以下文章