如何将一行分成单独的sas

时间:2016-10-15 23:04:04

标签: split sas row

我有一个数据集(表A),如下所示:

Location_id |  Arrival_Date | Length_of_Stay | Demand   | 

------------+---------------+--------------- +----------+

   L_1      | 23-JUL-16     |  1             | 5        |

   L_1      | 23-JUL-16     |  2             | 7        |

   L_1      | 23-JUL-16     |  3             | 8        |

   L_1      | 23-JUL-16     |  4             | 3        |

   L_1      | 24-JUL-16     |  1             | 3        |

   L_1      | 24-JUL-16     |  2             | 2        |

   L_1      | 24-JUL-16     |  3             | 4        |

   L_1      | 25-JUL-16     |  1             | 5        | 

 ...........  ............    .............   .......

我想转到下表:

Location_id |  Stay_Date |  Demand   | 

 L_1        | 23-JUL-16  |23= 5+7+8+3| (Arrival JUL-23, 4 Length_of_stays)

 L_1        | 24-JUL-16  |27= 7+8+3+3+2+4| (Arrival JUL-24, 3 Length_of_stays and Arrival JUL-23, 3 Length_of_stays)

 L_1        | 25-JUL-16  |22= 8+3+2+4+5|(JUL-23, 2 length_of_stays; JUL-24, 2 length_of_stays; JUL-25, 1 length_of_stay)

 L_1        | 26-JUL-16  |  7        |(JUL-23, 1 length_of_stay) 

需求以Stay_Date计算,根据Arrival_Date和Length_of_Stay计算。

如何在SAS中制作?谢谢!

1 个答案:

答案 0 :(得分:1)

你还没有完全解释你的问题。 我的假设:

  • 每一行都是逗留的记录和该住宿的需求水平。

  • 如果逗留时间为多天(逗留时间> 1),则创建一条记录 每一天的住宿。

  • 生成这些记录中的每一个 您在酒店/设施每天的总需求。

您还应该在数据步骤中发布样本数据。

data have;
informat arrival_date anydtdte.;
format arrival_date date9.;
infile cards dlm='|';
input Location_id $  Arrival_Date  Length_of_Stay  Demand  ;  

cards;
   L_1      | 23-JUL-16     |  1             | 5        |
   L_1      | 23-JUL-16     |  2             | 7        |
   L_1      | 23-JUL-16     |  3             | 8        |
   L_1      | 23-JUL-16     |  4             | 3        |
   L_1      | 24-JUL-16     |  1             | 3        |
   L_1      | 24-JUL-16     |  2             | 2        |
   L_1      | 24-JUL-16     |  3             | 4        |
   L_1      | 25-JUL-16     |  1             | 5        | 
;
run;

*Create a record for each day of the visit;
data temp;
set have;
format stay_date date9.;

do i=1 to length_of_stay;
    stay_date=arrival_date-1 + i;
    output;
end; 
run;

*summarize the totals;
proc sql;
create table want as
select stay_date, sum(demand) as total_demand
from temp
group by stay_date
order by stay_date;
quit;