Как конвертировать 201711 в 13.11.2017? - PullRequest
0 голосов
/ 13 июня 2018

Привет, я новичок в sas, и мне нужна помощь по этому вопросу.

Я хочу перевести 201711 в 13 ноября 2017 года. Я не могу понять эти сложные вопросы.

Пожалуйста, помогите и спасибозаранее.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Если «201711» - это просто какой-то текст, который нужно преобразовать, значит, номер дня отсутствует, поэтому его необходимо добавить.SAS рассматривает даты как числа, поэтому полезно преобразовывать текстовые даты в формат даты SAS.Затем дату можно переформатировать:

data want;
   have    = '201711';                 /* given partial date       */
   add_day = '13';                     /* day of month to add      */
   full_dt = cats(have,add_day);       /* join day to partial date */
   num_dt  = input(full_dt,yymmdd8.);  /* convert to a SAS date    */
   text_dt = put(num_dt,date9.);       /* format as desired        */
run;

Поскольку вы новичок в SAS, я прокомментировал, что делает каждая часть, но для вас было бы более полезно понять обработку / обработку даты в SAS, например,следующее полезное начало:

http://support.sas.com/documentation/cdl/en/lrcon/65287/HTML/default/viewer.htm#p1wj0wt2ebe2a0n1lv4lem9hdc0v.htm

0 голосов
/ 13 июня 2018

Если это для целей отображения и предполагается, что все значения даты имеют тот же формат, что и в вашем вопросе, то это должно работать.

Сначала вы создаете формат для отображения месяцев:

proc format lib=work;
 value mon
     1  = "Jan"
     2  = "Feb"
     3  = "Mar"
     4  = "Apr"
     5  = "May"
     6  = "Jun"
     7  = "Jul"
     8  = "Aug"
     9  = "Sep"
     10 = "Oct"
     11 = "Nov"
     12 = "Dec"
; 
run;

Затем вы подставляете месяц и год из переменной даты, а затем применяете форматы.

data have;
length full_date $20;
  date = 201711;
  mon = input(substrn(date,5,2),best.);
  yr = input(substrn(date,1,4),best.);
  full_date = compbl(put(mon,mon.)||put(yr,best.));
run;
...