2012-08-02 75 views
4

我正在重寫通常用於R的SAS程序。SAS程序中的許多語句都是用proc sql編寫的,所以爲了便於編程,我將這些語句與sqldf在R.所有的SQL代碼的工作方式相同與sqldf因爲它在SAS,但對於這一說法:PROC SQL和sqldf之間的區別

SAS:

proc sql; 
create table merged32 as 
select max(ctf) as ctf, 
     max(ctms) as ctms, 
     max(site_name) as site_name, 
     provider_id, npi, 
     first_name, middle_name, last_name, specialty, 
     address_1, city, state, site_ct, zip, site_key 
    from merged2 
    group by 9,10,11,12,14,15; 
quit; 
run; 

sqldf:

sqldf("select max(ctf) as ctf, 
       max(ctms) as ctms, 
       max(site_name) as site_name, 
       provider_id, npi, 
       first_name, middle_name, last_name, specialty, 
       address_1, city, state, site_ct, zip, site_key 
     from merged2 
     group by 9,10,11,12,14,15") 

在SAS,它r處理1878行數據集;在sqldf中,有一個1375的數據幀。

proc sql和sqldf之間是否有任何可能導致這種情況的主要區別,或者一般情況下需要考慮?我沒有提供數據,因爲1)數據集很大,2)我更感興趣的是瞭解兩個SQL系統之間的差異。

+1

不確定sqldf,但是對於有意義的結果,你應該在SQL *所有*您的關鍵變量組。 – stevepastelan 2012-08-02 19:19:35

+2

我從來不知道爲什麼我傾向於首先放置「關鍵」變量,並且總計最後。現在我知道... – wildplasser 2012-08-02 19:43:31

+0

拍攝,甚至沒有注意到列表中缺少的關鍵變量。謝謝各位 – user1445246 2012-08-02 19:51:43

回答

2

不確定關於sqldf,但對於有意義的結果,您應該按SQL中的所有關鍵變量進行分組。

0

在SAS的結果可能有重複的記錄,而那些在R請勿