2017-06-15 14 views
0

PROC SQL更新表我想左側從創建右側的表:(!工作) enter image description hereSAS具有計數和最大

我第一次使用下面的代碼來創建一個新表:

proc sql; 
    create table (table_right) as 
     select distinct Customer format $15. 
     from (table_left); 
    select * from (table_right); 
run; 

proc sql; 
    alter table (table_right) 
     add Count_bin30 num label='Count_bin30' format=1000000., 
      Max_Date_Diff num label='Max_Date_Diff' format=1000000.; 
    select Customer format=$15., 
      Count_bin30, 
      Max_Date_Diff 
    from (table_right); 
run; 

,然後當我嘗試更新新增加的欄目我被卡住了:

proc sql; 
    update (table_right) 
     set Count_bin30 = select count(Date_bin) 
     from (table_left) 
     where Date_bin='bin30'; 
run; 

proc sql; 
    update (table_right) 
     set Max_Date_Diff = select max(Date_diff) 
     from (table_left); 
run; 

任何解決方案,非常感謝!

+0

如果不將它作爲圖像發佈,使用數據更容易。 – Longfish

+0

注意。下次將避免這樣做。 – CodeMonkey

回答

1

沒有必要使用多個proc sql語句,您可以一氣呵成。還請注意,proc sqlquit結束,而不是run

data table_left; 
input customer $ date_diff date_bin $; 
datalines; 
James 0 0 
James 35 bin30 
James 0 0 
James 30 bin30 
James 0 0 
James 0 0 
Daniel 0 0 
Daniel 45 bin30 
Daniel 61 bin60 
Daniel 0 0 
Ivy 0 0 
Ivy 0 0 
Ivy 0 0 
Ivy 0 0 
Ivy 108 bin90 
Laura 0 0 
Laura 0 0 
; 
run; 

proc sql; 
create table table_right 
as select 
customer, 
sum(case when date_bin='bin30' then 1 else 0 end) as Count_bin30, 
max(date_diff) as Max_Date_Diff 
from table_left 
group by customer 
; 
quit; 
+0

哇,這不僅解決了我的問題,而且非常整潔......非常感謝! – CodeMonkey