2016-07-22 136 views
1

我想在SAS中做一些我正努力拼寫的內容。SAS:將日期間隔分爲多列

基本上,我有一個酒店列表的住宿日期 - 見表一。 我想改變桌子,讓我有一個晚上住的列表 - 見表二。

我的第一張桌子有兩個字段,反映客戶何時到達,第二個字段反映客戶何時離開酒店。第二張表中的日期字段列出了入住酒店的夜晚。我說晚上,因爲第二次約會是他們離開酒店的日期,所以他們不會過夜。

我如何從表一到表二?

任何建議將受到歡迎。

在此先感謝。

保羅

enter image description here

回答

2

由於日期存儲爲數字,這是一個非常簡單的任務,從in_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; 
+0

Keith感謝代碼。我的問題可能事後證明是一個愚蠢的問題,但您的代碼包含數據表。我的數據集顯然更大,如何在您提供的數據步驟中使用我的數據表? A從我的數據不起作用。謝謝你的幫助。 Paul – Paul

+0

只需在'set'語句 – Longfish

+0

中引用它即可。 – Paul

-1

要calc下夜的數量,你應該給這個代碼^

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; 

Ex。 2:

您也可以從table_two nigths的計算數量爲

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

在Ex1中,BY語句中的變量之間不能有逗號。這也不能回答這個問題。 – Reeza