如何根据另一个表

时间:2017-12-09 12:02:02

标签: sql sas

我的表格如下

Sample
 Source | Action |   DueDate            | Status
  A        Act_1    08DEC2017:00:00:00     Open
  A        Act_1    09DEC2017:00:00:00     closed
  A        Act_2    09DEC2017:00:00:00     Open
  A        Act_2    09DEC2017:00:00:00     closed
  A        Act_3    09DEC2017:00:00:00     Open
  B        Act_1    09DEC2017:00:00:00     Open
  B        Act_2    09DEC2017:00:00:00     closed

我想根据每个Action相对于源的条目数在我的最终表中添加数据。

我的最终表格为

final
 Source | Action | Total_Received | Total_closed | OverDue
   A       Act_1      2                1              1
   A       Act_2      2                1              0
   A       Act_3      1                0              0   
   B       Act_1      1                0              0   
   B       Act_2      1                1              0   

Total_Received是条目/行的总数

Total_Closed是已关闭条目的总数

Total_overdue是传递DueDate的打开条目的总数

这个时间的日期是9DEC2017

请告诉我动态更新我的表,因为我的系统中可能有很多Source类型和Action Type。

度过愉快的一天。

2 个答案:

答案 0 :(得分:1)

首先让我们将您的数据列表转换为数据集,以便我们有一个代码示例。

data sample;
  input source $ action $ duedate :datetime. status $ ;
  format duedate datetime20.;
cards;
  A  Act_1  08DEC2017:00:00:00 Open
  A  Act_1  09DEC2017:00:00:00 closed
  A  Act_2  09DEC2017:00:00:00 Open
  A  Act_2  09DEC2017:00:00:00 closed
  A  Act_3  09DEC2017:00:00:00 Open
  B  Act_1  09DEC2017:00:00:00 Open
  B  Act_2  09DEC2017:00:00:00 closed
;

在PROC SQL中计算满足条件的记录很容易,因为SAS会将​​布尔表达式计算为1/0值。因此,您只需SUM()结果即可获得真实数字的计数。如果要将日期时间值与需要转换其中一个的日期进行比较。我在下面使用了日期文字但是如果你想要今天的日期,你可以使用DATE()函数。

proc sql ;
create table final as
select
  source
 ,action
 ,count(*) as Total_Received
 ,sum( status='closed' ) as Total_Closed
 ,sum( status='Open' and datepart(duedate)< '09DEC2017'd) as OverDue
from sample
group by 1,2
;
quit;

答案 1 :(得分:0)

您可以使用条件聚合执行此操作:

select source, action,
       count(*) as total_received,
       sum(case when status = 'Closed' then 1 else 0 end) as total_closed,
       sum(case when status = 'Open' and DueDate < Today() then 1 else 0 end) as overdue
from t
group by source, action;

日期/时间功能因数据库而异。这使用适用于SAS proc sql的函数。