2017-09-24 80 views
1

我要让这样的工作PROC SQL:组合集合+表+窗函数中的一个去

proc sql; 
%connect_to_sql_macro; 
create table sql.table as 
(
select some_id, date from connection to oracle 
(
select some_id, date, row_number()over(partition by some_id order by date) as row from dataset d join sql_table s on d.some_id=s.some_id 
) where row=1 

基本上我需要根据数据集在Oracle中创建表加入了与Oracle表,并采取第一每个ID的日期。 如果我使用“从甲骨文”通过它不会看到数据集,如果我让它反过来我不能使用窗口函数(row_number())因为他们不在SAS。现在我从那个数据集创建一个表格,然后做一个通过,但它很大,我需要一次完成。有什么建议么?

+1

正如您所说,SAS不支持窗口函数,所以使用它们的唯一方法是首先将SAS数据集上传到Oracle,可能会将其上传到临时表。另一方面,SAS数据步骤可以使用_by-group_处理完成SQL窗口功能(以及更多)的功能。 – david25272

回答

1

你可能在SAS中做得更好。 可以在一个步骤中进行过

libname lib <oracle connection options>; 
proc sql; 
select some_id 
      ,date 
from dataset d 
inner join lib.sql_table s 
    on d.some_id=s.some_id 
group by some_id 
having date=min(date) 
; 
quit; 

proc sql; 
%connect_to_sql_macro; 
select some_id 
      ,date 
from dataset d 
inner join (select * from connection to oracle (
       select * from sql_table 
       ) 
      ) s 
    on d.some_id=s.some_id 
group by some_id 
having date=min(date) 
; 
quit; 

而且,限制多,您能正在从Oracle表格读取的记录量。