2

我只是在学习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 delete或者sql-drop?(速度更快,需要多少数据)

4

5 回答 5

7
  1. 一些SAS过程以 结束QUIT,而不是RUN因为它们正在运行Interactive Mode。例如,在 中PROC GLM,您可以指定一个附加模型语句,只要SAS窗口顶部显示PROC GLM正在运行(如果您使用的是该Windows版本)。

  2. 一些程序员已经养成了打字QUITRUN在一起的习惯。我认为这实际上并不重要,因为使用该QUIT语句的过程在您输入它们后立即开始运行。我只使用其中一种。

  3. PROC DELETE是不受支持的旧版功能;它已被PROC DATASETSSAS 中用于处理数据集的指定工具正式取代。邮件列表发布

我通常不会发现自己在SAS. 因为SAS有效地管理它的内存使用,并且因为现在 RAM 如此丰富,我通常使用临时数据集来完成 90% 的工作,这些临时数据集是在会话开始时按需创建的。

  1. 和以前一样,PROC DELETE现在不赞成使用PROC DATASETS. 就哪个更快而言,不包括非常大的数据,我敢打赌它们之间几乎没有区别。然而,在处理永久性 SAS 数据集时,我喜欢使用PROC DATASETS而不是,这仅仅是因为我觉得使用 SAS 设计的方法而不是我认为的实现(不是 100%)PROC SQL更好地操作永久性数据集。SQL
于 2012-04-17T15:37:13.483 回答
3

WRT“运行”与“退出”:

一些 SAS 程序支持称为“运行组处理”的东西,这意味着程序在看到“运行”时执行它被要求执行的任何工作;陈述。该过程继续执行,直到它看到“quit:”statemnet。事实上,一个“退出”;语句会自动插入一个“run;” 声明是否还有工作要做。

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 脚本中创建加载到 Teradata 和 Oracle 等外部数据库的新表时,我一直使用 PROC DELETE。

啰嗦,我知道,但我希望这会有所帮助。

鲍勃

于 2012-04-18T19:28:36.113 回答
2

关于数据集或 sql 在删除表时是否更快,我在这里调查了这个问题。 Proc SQL通常更快,这让我感到惊讶。

于 2012-04-18T00:33:06.260 回答
0

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

proc datasets lib=work memtype=data kill;跑;

退出;

于 2012-07-12T07:02:59.667 回答
0

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

于 2017-01-09T19:35:18.847 回答