2014-11-24 3 views
0

Я обновляю переменную yyyymmdd, например. 20141123 вручную. и преобразует 20141123 в 23NOV2014. Я сталкиваюсь с некоторыми проблемами, когда пытаюсь найти последний день месяца, который 30NOV2014, и сохраните его как enddate. Мой подход использует intnx(). ХотяSAS yyyymmdd до последней даты месяца

data _null_; 
    format yyyymmdd $8.; 
    yyyymmdd = '20141123'; 

    yyyy = put(substr(yyyymmdd, 1, 4), $4.); 
    yy = put(substr(yyyymmdd, 3, 2), $2.); 
    mm = put(substr(yyyymmdd, 5, 2), $2.); 
    dd = put(substr(yyyymmdd, 7, 2), $2.); 

    date = put(mdy(mm, dd, yyyy), date9.); 

    enddate = put(intnx('month',date,1,'end'), date9.); 
run; 

Благодарим за помощь.

+1

Вы можете прочитать ггггммдд проще с информа вместо использования преобразования подстроки/МДГ. Дата = вход (ггггммдд, ГГММДД.); –

ответ

4

Несколько вещей.

  1. Ввод() преобразует символы в числовые.

  2. Вы вынуждаете SAS преобразовывать символы YYYY, MM, DD и даты в числовые переменные. Я уверен, что вы видели ПРИМЕЧАНИЯ в этом эффекте в LOG.

  3. Вы получаете последний день следующего месяца. Текущий + 1. Вы хотите тока + 0.

Попробуйте

data _null_; 
format yyyymmdd $8.; 
yyyymmdd = '20141123'; 

yyyy = input(substr(yyyymmdd, 1, 4), $4.); 
yy = input(substr(yyyymmdd, 3, 2), $2.); 
mm = input(substr(yyyymmdd, 5, 2), $2.); 
dd = put(substr(yyyymmdd, 7, 2), $2.); 

date = mdy(mm, dd, yyyy); 

put date date9.; 
enddate = put(intnx('month',date,0,'end'), date9.); 
put enddate; 
run; 
+0

Hi @DomPazz. Спасибо за ваш четкий ответ. Моя ситуация заключается в том, что, поскольку мне нужно использовать дату для дальнейшего использования для экспорта в качестве имени файла, такого как report & date..xls. (report23Nov2014.xls) Хотя этот код является числовым вместо date9. формат. Я должен сделать другую переменную say dateoutput = put (date, date9.), Чтобы достичь этого? или есть альтернативный метод? – useR

+0

Да, это сработает. – DomPazz

+0

Как я новичок в sas и хотел бы уточнить, что дата является числовой или символьной? Или это зависит? Если я поставил (date, date9.), То он будет преобразовываться из числа в символ? Еще раз спасибо за вашу нежную помощь. – useR

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