PROC SQL和sqldf之间的区别

时间:2012-08-02 19:04:30

标签: sql r sas sqldf

我正在重写我通常用于R的SAS程序.SAS程序中的许多语句都是用proc sql编写的,所以为了便于编程,我用R中的sqldf复制这些语句。所有这些语句都是除了这个语句之外,sql代码与sqldf在SAS中的工作方式相同:

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中,它返回一个包含1878行的数据集;在sqldf中,数据帧为1375.

proc sql和sqldf之间是否存在导致此问题的主要差异,或者通常需要考虑?我没有提供数据,因为1)数据集很大,2)我更感兴趣的是了解两个sql系统之间的差异。

2 个答案:

答案 0 :(得分:2)

不确定sqldf,但是为了获得有意义的结果,您应该按SQL中的所有关键变量进行分组。

答案 1 :(得分:0)

SAS中的结果可能有重复的记录,而R中的结果不是