2012-04-17 146 views
2

我剛剛學習sas並看到兩個有趣的程序。SAS程序刪除和數據集

proc Delete data = table; run; 

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

和一些關於他們的問題:

  1. 爲什麼有些程序結束像quitrun

  2. 爲什麼datasets使用quitrun在一起? (這是一個退出表的聲明?)

  3. 對於小任務是否最好使用datasets-procedure? (當然不是,但爲什麼?或不使用它?)

  4. 以及,哪種方法更快:proc deletesql-drop? (其具有更高的速度和需要的數據量)

回答

6

1)一些SAS過程以QUIT而不是RUN結束,因爲它們在Ineractive模式下運行。例如,在PROC GLM中,只要SAS窗口的頂部顯示PROC GLM正在運行(如果您使用Windows版本),就可以指定其他模型語句。

2)一些程序員已經習慣了一起輸入QUIT和RUN的習慣。我認爲它並不重要,因爲使用QUIT語句的程序一旦輸入就開始運行。我只用一個或另一個。

3)PROC DELETE是一個不受支持的遺留功能;它已被PROC DATASETS正式取代,它是SAS處理數據集的指定工具。 Mailing List Post

我通常不會發現自己需要刪除SAS中的數據集。由於SAS有效地管理其內存使用,而且由於RAM現在非常豐富,我通常從我在會議開始時按需創建的臨時數據集中完成90%的工作。

4)與以前一樣,PROC DELETE現在被折舊以支持PROC DATASETS。在更快的情況下,排除非常大的數據,我敢打賭他們之間幾乎沒有什麼區別。然而,在處理永久SAS數據集時,我喜歡使用PROC DATASETS而不是PROC SQL,因爲我認爲使用SAS設計的方法更好地處理永久性數據集,而不是我認爲的SQL實現(這不是100%) 。

+1

sql實現如何不是100%? – DataParadigms 2012-04-18 11:49:45

+0

在SQL中,SQL可以執行的一些操作不能在PROC中執行。立即想到的是改變變量的類型。 – TARehman 2012-04-18 15:55:36

+0

啊,我在SQL實現中讀到「drop table」不是100%。 – DataParadigms 2012-04-18 16:21:23

2

關於數據集或sql在刪除表格時是否更快,我調查了這個問題hereProc SQL通常更快,這是令人驚訝的。

2

WRT「跑」與「退出」:

某些SAS程序支持一種叫「潤集團處理」,這意味着,無論工作,它要求的程序進行時,看到了做「運行」;聲明。該過程繼續執行,直到它看到「quit:」狀態。事實上,一個「退出」語句會自動插入一個「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腳本中創建新表時,我一直使用PROC DELETE,這些腳本加載到Teradata和Oracle等外部數據庫中。

囉嗦,我知道,但我希望這有助於。

鮑勃

0

我認爲下面的代碼可以刪除工作庫中的SAS數據集;

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

quit;

0

我相信你會發現PROC DELETE還沒有消失,不會很快。此外,它通常比某些類型的庫的刪除形式更快。根據我的經驗,由SPDS管理的數據庫有很多數據集可能導致任何種類的PROC DATASETS的性能都很差,所以我會總是使用PROC DELETE