2016-07-22 5 views
1

나는 SAS에 뭔가 말하고 싶다.SAS : 날짜 간격을 열로

기본적으로 숙박 날짜가있는 호텔 목록이 있습니다 (표 1 참조). 밤의 목록을 남기도록 테이블을 변경하고 싶습니다 - 표 2를보십시오.

첫 번째 표에는 고객이 도착했을 때 반영되는 두 개의 필드와 고객이 호텔을 떠날 때 반영되는 두 번째 필드가 있습니다. 두 번째 테이블에는 날짜 필드가 호텔에 숙박 한 밤을 나열합니다. 두 번째 데이트가 그들이 호텔을 떠난 날이므로 밤을 지키지 않을 것입니다.

어떻게 테이블 1에서 테이블 2로 갈 수 있습니까?

모든 의견을 환영합니다.

미리 감사드립니다.

예 :

enter image description here

답변

2

같은 날짜는 숫자로 저장 할 수 있기 때문에

, 그것은 매우 간단 작업 년대 out_date 및 출력 각각 전날에 in_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

이 코드를 시도 table_two이 계산 된 속성을 추가하려면이 코드^

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

에 당신이해야 밤의 수를 CALC합니다. 1 :

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

예. 2 : 또한 당신이 CALC 수 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