在SAS中转换日期时间格式
我如何转换这样的内容: 2006年1月1日下午11:00 为此: 1月06日:23:00:00 目前,我已从txt导入日期,并将日期和时间合并在一起:在SAS中转换日期时间格式,sas,Sas,我如何转换这样的内容: 2006年1月1日下午11:00 为此: 1月06日:23:00:00 目前,我已从txt导入日期,并将日期和时间合并在一起: data date_time; infile 'X:\date_time.txt' dlm=',' ; length date $20; input news $ time $ date $ words $; datetime =date || time; run; 谢谢您的帮助。虽然可能有更优雅的方式,但这里有一个选择: data tes
data date_time;
infile 'X:\date_time.txt' dlm=',' ;
length date $20;
input news $ time $ date $ words $;
datetime =date || time;
run;
谢谢您的帮助。虽然可能有更优雅的方式,但这里有一个选择:
data test;
length dt $30;
dt="1January2006 11:00PM";
if length(dt)=20 then dt="0"||dt;
date_num=input(substr(scan(dt,1),1,5)||compress(substr(scan(dt,1),3),,'kd'),date9.);
time_num=input(scan(dt,2),time.);
dt_num=dhms(date_num,hour(time_num),minute(time_num),0);
put dt_num datetime.;
run;
日志输出给出:
01JAN06:23:00:00
虽然可能有更优雅的方式,但这里有一个选择:
data test;
length dt $30;
dt="1January2006 11:00PM";
if length(dt)=20 then dt="0"||dt;
date_num=input(substr(scan(dt,1),1,5)||compress(substr(scan(dt,1),3),,'kd'),date9.);
time_num=input(scan(dt,2),time.);
dt_num=dhms(date_num,hour(time_num),minute(time_num),0);
put dt_num datetime.;
run;
日志输出给出:
01JAN06:23:00:00
我认为你最简单的方法是使用日期和时间信息而不是文本来阅读日期和时间。然后可以使用DHMS函数创建datetime列并应用所需格式
datetime=dhms(date,0,0,time);
我认为你最简单的方法是使用日期和时间信息而不是文本来阅读日期和时间。然后可以使用DHMS函数创建datetime列并应用所需格式
datetime=dhms(date,0,0,time);
处理凌乱的数据可能很棘手。在这种情况下,需要将传入的文本字符串分解为多个部分,然后将这些部分转换为datetime值。下面是一个有帮助的例子:
data want;
input @1 date_string $23.;
length DatePart $15 TimePart $7 DayMonthPart $5 YearPart $4;
drop DatePart TimePart DayMonthPart YearPart;
format DT datetime.;
DatePart = scan(date_string,1);
TimePart = scan(date_string,2);
YearPart = substr(DatePart,length(DatePart) - 3);
if notalpha(DatePart,2) = 2 /* Second character is a digit */
then DayMonthPart = substr(DatePart,1,5);
else DayMonthPart = '0' || substr(DatePart,1,4);
DT = input(DayMonthPart || YearPart || ' ' || TimePart,datetime.);
put date_string= / DT= /;
datalines;
30september2012 11:00PM
1january2012 11:00PM
31january2012 11:00PM
1july2012 11:00AM
30july2012 1:00AM
run;
上面的代码故意冗长,因此您可以看到它是如何工作的。处理凌乱的数据可能很棘手。在这种情况下,需要将传入的文本字符串分解为多个部分,然后将这些部分转换为datetime值。下面是一个有帮助的例子:
data want;
input @1 date_string $23.;
length DatePart $15 TimePart $7 DayMonthPart $5 YearPart $4;
drop DatePart TimePart DayMonthPart YearPart;
format DT datetime.;
DatePart = scan(date_string,1);
TimePart = scan(date_string,2);
YearPart = substr(DatePart,length(DatePart) - 3);
if notalpha(DatePart,2) = 2 /* Second character is a digit */
then DayMonthPart = substr(DatePart,1,5);
else DayMonthPart = '0' || substr(DatePart,1,4);
DT = input(DayMonthPart || YearPart || ' ' || TimePart,datetime.);
put date_string= / DT= /;
datalines;
30september2012 11:00PM
1january2012 11:00PM
31january2012 11:00PM
1july2012 11:00AM
30july2012 1:00AM
run;
上面的代码故意冗长,因此您可以看到它是如何工作的