f*******i 发帖数: 8492 | 1 我现在已有一个sas格式现成的data sheet
其中date1的格式是这样的 21MAY2001:00:00:00
但这组数据是character, 而不是date value
所以我需要把这组数据转换成sas的date value,并且减去 "01JAN2001"得到差值
我的code如下:
data homework10;
set class.homework10;
date2=input(date1,date9.);
format date2 date9.;
range=date2-'01JAN2001'dt;
run;
proc print data=homework10;
var date1 date2 range;
run;
现在我的问题,经过打印,我得到的date2确实只是date1里面的日期部分
1. 我所有的date2数值理论上都是大于01JAN2001这个值的,但是得出的range都是负值
,这事怎
么回事? 比如“-1277926548”。
2. 如何把range这个数据以“天数”的形式表示?
谢谢 |
EA 发帖数: 3965 | 2 21MAY2001:00:00:00 is datetime format not date9. you should use datetime17. |
h******s 发帖数: 3420 | 3 这个难道不是numeric value?
【在 EA 的大作中提到】 : 21MAY2001:00:00:00 is datetime format not date9. you should use datetime17.
|
d******9 发帖数: 404 | 4 "其中date1的格式是这样的 21MAY2001:00:00:00"
包括时间部分,应该用 datetime16.读入,然后把时间部分去除。
dateonly=datepart(date1); |
f*******i 发帖数: 8492 | 5 是这样的,我已经有一个datasheet,homework10.sas7bdat
然后,其中的date1格式就是“21MAY2001:00:00:00”, 但这个不是numeric value,
而是character
所以我根据楼上说的,先把date1读写为numeric value的date2,再从中提取date部分
data homework10;
set class.homework10;
date2=input(date1,date16.);
format date2 date16.;
date3=datepart(date2);
format date3 date9.;
range=date3-'01JAN2001'dt;
run;
proc print data=homework10;
var date1 date2 date3 range;
run;
如果时间格式是“21MAY2001:00:00:00”, 那么datetime后面跟着的数字是应该取15,
16,17,还是18?
我现在无论取那个数,得到的date2,都是这种格式“21MAY01:00:00:00”,并且得到
得date3是21 |
f*******i 发帖数: 8492 | 6 另外有个问题
比如
01JAN2000:00:00:00
date是9位
time是6位
datetime17. 多出来的两位是怎么来的? |
h******e 发帖数: 1791 | 7 时间里的:也算。
【在 f*******i 的大作中提到】 : 另外有个问题 : 比如 : 01JAN2000:00:00:00 : date是9位 : time是6位 : datetime17. 多出来的两位是怎么来的?
|
q******d 发帖数: 158 | 8 use datepart(date1), then you can get the date1=21May2001
【在 f*******i 的大作中提到】 : 我现在已有一个sas格式现成的data sheet : 其中date1的格式是这样的 21MAY2001:00:00:00 : 但这组数据是character, 而不是date value : 所以我需要把这组数据转换成sas的date value,并且减去 "01JAN2001"得到差值 : 我的code如下: : data homework10; : set class.homework10; : date2=input(date1,date9.); : format date2 date9.; : range=date2-'01JAN2001'dt;
|