2016-09-08 2 views
0

У меня есть следующий скрипт для ввода моих данных и создания набора данных.SAS: Как создать поле даты из поля месяца, поля дня и года

data HotelRooms; 
INFILE '/folders/myfolders/Hotel.dat' missover; 
input RoomNo 1-4 NumbeGuests 7-8InMonth $ Inday $ InYear $ OutMonth $ 

OutDay $ OutYear $ UseWireless :$3. DaysUsed RoomType$53-68 RoomRate 69-71; 

checkindate=CAT(InMonth,InDay,InYear); 
checkoutdate=CAT(OutMonth, OutDay, OutYear); 
If UseWireless='YES' then fee=9.95; 
run; 
proc print data=HotelRooms noobs; 
format checkindate MMDDYY10.; 
format checkoutdate MM/DD/YY/10.; 
Run; 

Нагрузка данных в набор данных просто отлично, но когда я создаю дату CheckIN и дату оформления заказа я столкнулся с проблемами. Когда я использую CAT, я не могу добавить формат даты. Печать не печатает ни/или - в дате, только mm dd yyyy. Мне также нужно будет использовать даты для расчетов.

Любая помощь будет оценена по достоинству.

+0

'MISSOVER' может вызвать ошибки с тем, что INPUT. Если строка ввода имеет длину всего 70 символов, то RoomRate будет отсутствовать, даже если в столбцах 69 и 70 будет номер. В общем случае вы должны использовать 'TRUNCOVER' вместо' MISSOVER', чтобы исправить только эту проблему. – Tom

ответ

1

Вместо чтения вашей M значения/D/Y в качестве символов, читать их как числа и использовать функцию mdy() создать дату SAS из составных частей:

 
data HotelRooms; 
    INFILE '/folders/myfolders/Hotel.dat' missover; 
    input RoomNo 1-4 NumbeGuests 7-8 
     InMonth Inday InYear 
     OutMonth OutDay OutYear 
     UseWireless :$3. DaysUsed RoomType $53-68 RoomRate 69-71; 

    checkindate = mdy(InMonth,InDay,InYear); 
    checkoutdate = mdy(OutMonth, OutDay, OutYear); 
    if UseWireless = 'YES' then fee = 9.95; 
    format checkindate checkoutdate mmddyy10. ; 
run; 

proc print data=HotelRooms noobs; 
run; 
+0

Это сработало Крисом. Спасибо. Похоже, я пытался сделать это сложнее, чем это было. – kahunabee

Смежные вопросы