2017-06-15 87 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