SAS程序删除和数据集

时间:2012-04-17 14:41:47

标签: dataset sas

我只是学习sas并看到两个有趣的程序。

  proc Delete data = table;  run;

  proc datasets lib=Libr nolist;
        modify table;
           rename __first = second;
  quit;
  run;

以及关于他们的几个问题:

  1. 为什么某些程序的结果如quit而不是run

  2. 为什么datasets一起使用quitrun? (这是退出表的声明吗?)

  3. 最好将datasets-procedure用于小任务吗? (当然不是,但是为了什么?或者不使用它?)

  4. 以及哪种方法更快:proc deletesql-drop? (具有更高的速度和必要的数据量)

5 个答案:

答案 0 :(得分:7)

  1. 有些SAS程序以QUIT而不是RUN结尾,因为它们在Interactive Mode中运行。例如,在PROC GLM中,只要SAS窗口顶部显示PROC GLM正在运行(如果您使用Windows,就可以指定其他模型语句}版本。。

  2. 有些程序员养成了一起输入QUITRUN的习惯。我认为这不重要,因为使用QUIT语句的程序一进入就会开始运行。我只使用其中一个。

  3. PROC DELETE是不受支持的旧版功能;它已被PROC DATASETS正式取代,SAS是处理SAS数据集的指定工具。 Mailing List Post

  4. SAS中,我通常不需要删除数据集。因为PROC DELETE有效地管理了它的内存使用,并且因为RAM现在非常丰富,所以我通常会从会话开始时按需创建的临时数据集中完成90%的工作。

    1. 与以前一样,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在删除表时是否更快,我调查了该问题hereProc SQL通常更快,这让我感到惊讶。

答案 3 :(得分:0)

我认为以下代码可以删除工作库中的SAS数据集;

proc数据集lib = work memtype = data kill; 运行;

退出;

答案 4 :(得分:0)

我相信你会发现PROC DELETE并没有消失,也不会很快消失。而且,对于某些类型的库,它通常比PROC DATASETS ... DELETE删除形式更快。根据我的经验,由SPDS管理的包含许多数据集的数据库可能导致任何类型的PROC DATASETS性能非常差,因此我总是使用PROC DELETE