如何将201711转换为2017年11月13日?

时间:2018-06-13 04:01:54

标签: sas

嗨,我是初学者是sas,我需要这个问题的帮助。

我想将2017年转换为2017年11月13日。我无法理解这个棘手的问题。

请提前帮助和谢谢。

2 个答案:

答案 0 :(得分:0)

如果这是出于显示目的,并假设所有日期值与您的问题中的格式相同,那么这应该有效。

首先创建显示月份的格式:

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;

答案 1 :(得分:0)

如果' 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