2015-08-13 2 views
3

Я следующий формат даты характера:SAS не распознающие формат даты

"3/1990" 
"4/1990" 
"5/1990" 
... 

Я попытался следующий код:

data work.temps; 
    set indata; 
    newdate = input(strip(Date), MMYYSw.); 
    rename newdate = date; 
run; 

Я продолжаю получать следующее meassage об ошибке: Informat MMYYSW was not found or could not be loaded.

+0

Вы можете попробовать 'MMYYS.' вместо' MMYYSw.'. Смотрите, если это имеет значение – ander2ed

+0

Нет, я получаю ту же ошибку – Josh

ответ

5

Возможно, вам придется использовать другую информацию для чтения в дате символа, чтобы SAS мог интерпретировать их как числовые (поскольку даты в SAS являются фактически числовыми значениями), а затем для сопоставьте их как MMYYS..

Это был протестирован и работает для меня:

DATA temps; 
FORMAT newdate MMYYS.; 
SET indata; 
newdate = INPUT(COMPRESS('01/'||date),DDMMYY10.); 
RUN; 
+0

Это приятно :-) – vasja

+0

Спасибо. Я скажу, что ваш ответ действительно отличает FORMAT и INFORMAT. – ander2ed

1

Что вы имеете в виду это формат, не Informat. Вы будете использовать формат с функцией PUT, для INPUT вам понадобится информация.

Во всяком случае я не нашел подходящий Informat, который будет использоваться непосредственно, так что вам нужно сделать больше вещей:

data work.temps; 
infile cards truncover; 
input Date $10.; 
newdate=MDY(scan(Date,1, '/'), 1, scan(Date,2, '/')); 
cards; 
3/1990 
4/1990 
5/1990 
; 
run; 

SCAN принимает Nth слова из строки, MDY создает DATE от месяца, дня и Год. Приведенный выше код дает первый день месяца.

2

Попробуйте это anydtdte:

data have; 
    input date $10.; 
    _date=input(compress(date,'""'),anydtdte.); 
    format _date MMYYs7.; 
    cards; 
    "3/1990" 
    "4/1990" 
    "5/1990" 
    ; 
    run; 
Смежные вопросы