2016-11-25 2 views
0

Я пытаюсь импортировать переменную (называемую bdate), содержащую даты, выраженные в формате YYYYMM или YYYYMMDD. Учитывая, что мне нужно импортировать много файлов с той же проблемой, я попытался создать свой собственный запрос FORCAT FORMAT для своего формата (называемый датой).SAS: импортирование разных дат формата в пределах одной переменной

PROC FORMAT; 
    value date 
    0 - 999999 = [YYMMN6.] 
    1000000 - 99999999 = [YYMMDD10.]; run; 

Журнал не показывает никаких сообщений об ошибках, но мой собственный формат не работает, когда я пытался использовать его для bdate переменной импорт:

data example; 
infile ....; 
     informat bdate best10. ; 
     format bdate date10. ; 
     run; 

Как я могу исправить эту проблему?

ответ

2

Вам необходимо определить информатив, а не формат. Форматы предназначены для отображения данных, а для импорта данных - информатики. Просто случается так, что множество встроенных форматов даты SAS имеют эквивалентную информацию и наоборот, поэтому различие не очевидно вначале, пока вы не начнете определять свои собственные.

PROC FORMAT; 
    invalue mydate 
    0 - 999999 = [YYMMN6.] 
    1000000 - 99999999 = [YYMMDD10.]; 
run; 

data _null_; 
    do i = 201601,20160102; 
    j = input(i,mydate.); 
    put j yymmdd10.; 
    end; 
run; 
0

Почему бы не просто сначала прочитать его в символьной переменной, а затем применить правильную информацию на основе длины?

data test ; 
    input chardate $ ; 
    if length(chardate)=6 then date=input(chardate,YYMMN6.); 
    else if length(chardate)=8 then date=input(chardate,YYMMDD8.); 
    format date yymmdd10. ; 
    put chardate= date= ; 
cards; 
201601 
20160125 
; 
Смежные вопросы