2017-09-24 84 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表格讀取的記錄量。