SAS:日期间隔到列

时间:2016-07-22 09:43:21

标签: date sas

我想在SAS做一些我正在努力用语言表达的东西。

基本上,我有一份有住宿日期的酒店列表 - 见表一。 我想换桌子,以便我有一份住宿清单 - 见表二。

我的第一张桌子有两个字段反映客户何时到达,第二个字段反映客户离开酒店时。第二个表格中的日期字段列出了酒店住宿的夜晚。我说晚上的第二个日期是他们离开酒店的日期,所以他们不会过夜。

如何从第一表到第二表?

欢迎任何建议。

提前致谢。

enter image description here

2 个答案:

答案 0 :(得分:2)

由于日期存储为数字,因此从out_date循环到out_date前一天并输出循环的每次迭代都是一项相当简单的任务。

data have;
infile datalines dsd;
input hotel $ customer_name $ City $ in_date :date9. out_date :date9.;
format in_date out_date date9.;
datalines;
Hotel A, Joe, New York, 01jan2015, 04jan2015
Hotel B, Joe, Chicago, 05feb2015, 07feb2015
Hotel C, Sam, Portland, 15jun2015, 18jun2015
Hotel D, Amy, Boston, 04mar2015, 07mar2015
Hotel C, Sam, Portland, 15oct2015, 17oct2015
Hotel A, Tom, New York, 01nov2015, 02nov2015
;
run;

data want;
set have;
format stay_date date9.;
do stay_date = in_date to out_date-1;
output;
end;
drop in_date out_date;
run;

答案 1 :(得分:-1)

要计算夜晚的数量,您应该使用此代码^

data table_one;
   set table_one;
   count_nights = out_date - in_date;
run;

要将此计算属性添加到table_two,请尝试以下代码:

实施例。 1:

data table_two;
   merge table_two table_one;
   by hotel, customer_name, city;
run;

实施例。 2:

此外,您可以将table_two中的nigth计数为

proc sql;
   create table table_two_nights as
   select t.*, count(*) as count_nights
   from table_two
   group by hotel, customer_name, city;
quit;