我只是学习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
? (具有更高的速度和必要的数据量)
答案 0 :(得分:7)
有些SAS
程序以QUIT
而不是RUN
结尾,因为它们在Interactive Mode
中运行。例如,在PROC GLM
中,只要SAS
窗口顶部显示PROC GLM
正在运行(如果您使用Windows
,就可以指定其他模型语句}版本。。
有些程序员养成了一起输入QUIT
和RUN
的习惯。我认为这不重要,因为使用QUIT
语句的程序一进入就会开始运行。我只使用其中一个。
PROC DELETE
是不受支持的旧版功能;它已被PROC DATASETS
正式取代,SAS
是处理SAS数据集的指定工具。 Mailing List Post
在SAS
中,我通常不需要删除数据集。因为PROC DELETE
有效地管理了它的内存使用,并且因为RAM现在非常丰富,所以我通常会从会话开始时按需创建的临时数据集中完成90%的工作。
PROC DATASETS
现已弃用,以支持PROC DATASETS
。就哪个更快,排除超大数据,我敢打赌它们之间几乎没有什么区别。但是,在处理永久SAS数据集时,我喜欢使用PROC SQL
而不是SQL
,因为我觉得使用SAS设计的方法更好地操作永久数据集,而不是{{1}}实现(在我看来,这不是100%。答案 1 :(得分:3)
WRT“run”与“quit”:
某些SAS程序支持称为“运行组处理”的东西,这意味着该程序执行它在看到“运行”时要求执行的任何工作。声明。该过程继续执行,直到它看到“退出:”statemnet。事实上,“退出”;语句会自动插入“运行”;声明如果还有工作要做。
PROC DATASETS是其中一个程序。 “退出;”声明说,该程序没有更多的工作要做。考虑一下这个简单的例子:
proc datasets;
change a=new_a;
run;
delete new_a;
run;
quit;
第一个语句(更改)将现有数据集“a”重命名为“new_a”。第二个语句将删除该数据集。如果你没有包括“跑”;在此示例中,语句(在“更改”之后),该过程将失败,因为它会注意到“new_a”数据集不存在,因此不会执行任何一个语句。
那就是说,我自己很少使用PROC DATASETS;我更喜欢使用PROC SQL。
WRT:PROC DELETE与DROP TABLE和PROC SQL:
虽然PROC DELETE正式“弃用”,但这意味着它将不再被更改。从SAS库中删除数据对象是一个简单的过程。我用它所有的时间。与PROC SQL相比,它具有一个特殊优势。如果使用PROC DELETE尝试删除不存在的数据集,则只会在日志中收到警告消息。但是,如果从SQL尝试DROP TABLE语句,则会出现错误,并且SQL步骤将停止。在我的ETL脚本中创建新表时,我一直使用PROC DELETE加载到Teradata和Oracle等外部数据库。
啰嗦,我知道,但我希望这会有所帮助。
鲍勃
答案 2 :(得分:2)
关于数据集或sql在删除表时是否更快,我调查了该问题here。 Proc SQL
通常更快,这让我感到惊讶。
答案 3 :(得分:0)
我认为以下代码可以删除工作库中的SAS数据集;
proc数据集lib = work memtype = data kill; 运行;
退出;
答案 4 :(得分:0)
我相信你会发现PROC DELETE
并没有消失,也不会很快消失。而且,对于某些类型的库,它通常比PROC DATASETS ... DELETE
删除形式更快。根据我的经验,由SPDS管理的包含许多数据集的数据库可能导致任何类型的PROC DATASETS
性能非常差,因此我总是使用PROC DELETE
。