楼主: shawfee
19984 29

[求助]如何将字符型数据转化为日期时间型数据 [推广有奖]

  • 15关注
  • 1粉丝

至尊账号

教授

17%

(VIP/贵宾)十级

83%

威望
0
论坛币
1020876 个
通用积分
150.3957
学术水平
4 点
热心指数
3 点
信用等级
2 点
经验
14259 点
帖子
361
精华
0
在线时间
1896 小时
注册时间
2006-5-12
最后登录
2024-4-23

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

如何将字符型数据转化为日期时间型数据

例如:

  time   (字符型数据 )---如何转化为----> time(日期时间型数据)

2003-12-1 9:23:24                                 2003-12-01 9:23:24  

2003-12-3 14:12:09                               2003-12-03 14:12:09 

2003-12-10 9:36:24                               2003-12-10 9:36:24

2003-12-23 14:24:27                             2003-12-23 14:24:27 

恳请达人帮忙,不胜感激,谢谢!

[此贴子已经被作者于2009-3-14 14:07:44编辑过]

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:字符型数据 数据转化 字符型 time 不胜感激 数据 时间 字符

回帖推荐

pobel 发表于6楼  查看完整内容

data a;     input dt $20.;  datalines;2003-12-1 9:23:242003-12-3 14:12:092003-12-10 9:36:24;run;proc format;     picture dt low-high='%Y-%m-%d %H:%M:%0S' (datatype=datetime);run;data b;     length datec $10 dtc $20;     set a;  datepart=scan(dt,1,' ');  timepart=scan(dt,2,' ');  daten=input(datepart ...

chengsm13 发表于4楼  查看完整内容

使用“scan”函数。下面是你的数据的一个例子。注意下面的这个数据中只有一个空格,在“9点”以前。data A;    input date_time $20.;    datalines;2003-12-1 9:24:25 ;run;data A;    set A;    date=scan(date_time,1,' ');    time=scan£¨date_time,2,' ');    year=scan(date,1,'-'); month=scan(date,2,'-');  ...

rdzr 发表于3楼  查看完整内容

lz,不知你的数据文件是不是很多很庞大。如果数据不多,文件又不是很大,编程当然可以,但是很麻烦,偶倒是有一个“笨”办法,LZ不妨一试:1、把你原来的字符型日期时间数据粘贴到 excel 电子表格中,自动就会变成 日期时间型数据,然后存盘并关闭excel文件。2、假定你的数据存放路径为 f:\time.xls(sheet1),则用如下程序导入 sas即可。示例如下:proc import out=time file='f:\time.xls' dbms=excel replace;    ...

本帖被以下文库推荐

愛是恆久忍耐,又有恩慈;愛是不嫉妒;愛是不自誇,不張狂,不作害羞的事,不求自己的益處,不輕易發怒,不計算人的惡,喜歡不義,只喜歡真理;凡事包容,凡事相信,凡事盼望,凡事忍耐;愛是永不止息。
沙发
shawfee 发表于 2009-3-16 18:19:00 |只看作者 |坛友微信交流群

那么没人理啊

愛是恆久忍耐,又有恩慈;愛是不嫉妒;愛是不自誇,不張狂,不作害羞的事,不求自己的益處,不輕易發怒,不計算人的惡,喜歡不義,只喜歡真理;凡事包容,凡事相信,凡事盼望,凡事忍耐;愛是永不止息。

使用道具

藤椅
rdzr 发表于 2009-3-16 20:20:00 |只看作者 |坛友微信交流群

lz,不知你的数据文件是不是很多很庞大。如果数据不多,文件又不是很大,编程当然可以,但是很麻烦,偶倒是有一个“笨”办法,LZ不妨一试:

1、把你原来的字符型日期时间数据粘贴到 excel 电子表格中,自动就会变成 日期时间型数据,然后存盘并关闭excel文件。

2、假定你的数据存放路径为 f:\time.xls(sheet1),则用如下程序导入 sas即可。示例如下:

proc import out=time file='f:\time.xls' dbms=excel replace;
            getnames=yes;
            sheet=sheet1;
run;
proc print data=time;
run;

下面是打印输出的结果:

         The SAS System                        11:10 Sunday, January 10, 2003   2

Obs                    TIME

1       01DEC2003:09:23:24
2       03DEC2003:14:12:09
3       10DEC2003:09:36:24
4       23DEC2003:14:24:27

(注:偶是严格地按按照 LZ 在本帖中 帖出的  日期时间 文本 粘到 excel并导入 SAS后得到的结果,在SAS 8.2 系统中 通过。请LZ参考,谢谢!)

已有 2 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子
李会超 + 60 热心帮助其他会员

总评分: 经验 + 63  论坛币 + 3   查看全部评分

使用道具

板凳
chengsm13 发表于 2009-3-17 12:59:00 |只看作者 |坛友微信交流群

使用“scan”函数。

下面是你的数据的一个例子。注意下面的这个数据中只有一个空格,在“9点”以前。

data A;

    input date_time $20.;

    datalines;
2003-12-1 9:24:25
;

run;

data A;

    set A;

    date=scan(date_time,1,' ');

    time=scan£¨date_time,2,' ');
    year=scan(date,1,'-');
 month=scan(date,2,'-');
    day=scan(date,3,'-');

 hour=scan(time,1,':');
 minute=scan(time,2,':');
 second=scan(time,3,':');

 real_date=mdy(month, day,year);
 real_date_time=dhms(real_date,hour,minute,second);

run;

data A;

    set A;
 format real_date_time datetime.;
run;

quit;

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

报纸
liulunju 发表于 2009-3-17 13:02:00 |只看作者 |坛友微信交流群

以前我用Input函数把字符型转过日期型,但是日期时间型没试过,不知道行不行

使用道具

地板
pobel 在职认证  发表于 2009-3-17 13:26:00 |只看作者 |坛友微信交流群


data a;
     input dt $20.;
  datalines;
2003-12-1 9:23:24
2003-12-3 14:12:09
2003-12-10 9:36:24
;
run;

proc format;
     picture dt low-high='%Y-%m-%d %H:%M:%0S' (datatype=datetime);
run;

data b;
     length datec $10 dtc $20;
     set a;
  datepart=scan(dt,1,' ');
  timepart=scan(dt,2,' ');
  daten=input(datepart,yymmdd10.);
  datec=put(daten,date9.);
  dtc=catx(':',datec,timepart);
     dtn=input(dtc,datetime19.);
  format dtn dt20.;
  keep dt dtn;
run;


已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
Tigflanker + 3 + 3 + 3 去学一下picture句,第一次见

总评分: 经验 + 3  论坛币 + 3  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

和谐拯救危机

使用道具

7
shawfee 发表于 2009-3-19 08:05:00 |只看作者 |坛友微信交流群

太谢谢各位的帮忙了,问题已经解决。看来还是有很多热心人的。再次表示感谢!

我的数据量比较大

我是这样做的

data b; 

  set a;
  dtime=input(time, anydtdtm21.); *time就是那列字符型的数据;
  format dtime datetime20.;
run;

愛是恆久忍耐,又有恩慈;愛是不嫉妒;愛是不自誇,不張狂,不作害羞的事,不求自己的益處,不輕易發怒,不計算人的惡,喜歡不義,只喜歡真理;凡事包容,凡事相信,凡事盼望,凡事忍耐;愛是永不止息。

使用道具

8
freeseaman 发表于 2009-3-23 09:42:00 |只看作者 |坛友微信交流群
学习。

使用道具

9
rdzr 发表于 2009-3-27 08:37:00 |只看作者 |坛友微信交流群
以下是引用shawfee在2009-3-19 8:05:00的发言:

太谢谢各位的帮忙了,问题已经解决。看来还是有很多热心人的。再次表示感谢!

我的数据量比较大

我是这样做的

data b; 

  set a;
  dtime=input(time, anydtdtm21.); *time就是那列字符型的数据;
  format dtime datetime20.;
run;

LZ,用你提到的上述方法 在 偶的 SAS8.2系统中无法通过,偶怀疑是anydtdtm21. 这个关键字有误!请LZ主复查,以免别的坛友走弯路。谢谢!!

使用道具

10
rdzr 发表于 2009-3-27 12:01:00 |只看作者 |坛友微信交流群

LZ,下面是偶在SAS 9.1.3系统中的程序及运行结果:

/*以下是偶根据LZ的意思编写的程序*/

data a;
input time $21;
cards;
2003-12-1 9:23:24
2003-12-3 14:12:09
2003-12-10 9:36:24
run;


data b;
  set a;
  dtime=input(time, anydtdtm21.);
  format dtime datetime20.;
run;
proc print data=b;
run;

/*下面是程序的运行结果*/

                                      The SAS System     11:42 Saturday, March 27, 2009   4

                            Obs    time                   dtime

                             1                                .
                             2                                .
                             3                                .

很显然,在SAS 9.1.3系统中,按照LZ所提供的程序 转换 并不成功,是偶的理解有误 还是 LZ的程序有误?请LZ 及众位高手指正!谢谢!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 18:03