SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1175|回复: 6
打印 上一主题 下一主题

请教一个关于时间格式转换的问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2007-8-24 17:16:57 | 只看该作者

请教一个关于时间格式转换的问题

首先,在提这个问题前,我已经将这个版面上的关于时间格式转换的帖子都读了一边,发现不能解决我的问题。

原始数据样式为:

Date                        CSpd          RSpd
2002/1/1/0        6.9        5.9666
2002/1/1/6        7.1        7.2176
2002/1/1/12        7.8        7.9405
2002/1/1/18        6.9        6.0174
2002/1/2/0        5.5        6.1646
2002/1/2/6        3.1        1.7687

其中,date这一列表示的年/月/日/时。例如,2002/1/1/18表示的是,2002年1月1日18时。
请问如何讲这个表的date导入到sas表中呢?

我觉得有两个难点:一是月份、日期和小时不都是用两位数字表示的(2002/1/1而不是2002/01/01);二是日期和小时放在一起(但是又不包含分秒)。

提问前已经查过sas里的help文件,并学习过SAS programming I: Essentials的内容,均难以找到好的解决办法,故求助,在线等!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2007-8-24 22:49:33 | 只看该作者

to linwise

如果说你已经看过前人的帖子;查过HELP;并且也学习过SAS programming I了,说明你努力过了,也动过脑筋了,我愿意与这样的朋友交流。请试试看:
[code:7fa5a]data temp;
infile datalines;
input Date:yymmdd8. CSpd RSpd;
format Date yymmdd10.;
datalines;
2002/1/1/0 6.9 5.9666
2002/1/1/6 7.1 7.2176
2002/1/1/12 7.8 7.9405
2002/1/1/18 6.9 6.0174
2002/1/2/0 5.5 6.1646
2002/1/2/6 3.1 1.7687
;
run;[/code:7fa5a]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2007-8-24 23:14:47 | 只看该作者

Re: 请教一个关于时间格式转换的问题

Thanks! I'll try it immediately! <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2007-8-25 11:07:19 | 只看该作者

Re: 请教一个关于时间格式转换的问题

非常感谢楼主的回答!上面的code确实可以讲该数据导入的sas中!但是这些数据是在一个文本文档中的,所以我将该code稍微修改下以后,在sas里run的时候又报错了。。。。困惑中。。。请问我这段修改后的code里哪里有错误呢?望不吝赐教。。。

[color=#0000FF:1ee5c]我修改后的code如下:[/color:1ee5c]

[code:1ee5c]data temp;
    infile 'D&#58;\SAS_assignment\wm1&#46;txt' firstobs=2;  /*the first line of data is title, ommited*/
    input Date&#58;yymmdd8&#46; CSpd RSpd;
    format Date yymmdd10&#46;;
run;[/code:1ee5c]

[color=#0000FF:1ee5c]log中的报错为:[/color:1ee5c]

[code:1ee5c]NOTE&#58; The infile 'D&#58;\SAS_assignment\wm1&#46;txt' is&#58;
      File Name=D&#58;\SAS_assignment\wm1&#46;txt,
      RECFM=V,LRECL=256

NOTE&#58; Invalid data for CSpd in line 3 1-21&#46;
NOTE&#58; Invalid data for RSpd in line 4 1-22&#46;
RULE&#58;     ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0

4   CHAR  2002/1/1/12&#46;7&#46;8&#46;7&#46;9405 22
    ZONE  3333232323303230323333
    NUMR  2002F1F1F1297E897E9405
NOTE&#58; Invalid data errors for file ''D&#58;\SAS_assignment\wm1&#46;txt'' occurred outside the printed range&#46;
NOTE&#58; Increase available buffer lines with the INFILE n= option&#46;
Date=2002-01-01 CSpd=&#46; RSpd=&#46; _ERROR_=1 _N_=1
NOTE&#58; Invalid data for CSpd in line 6 1-21&#46;
NOTE&#58; Invalid data for RSpd in line 7 1-21&#46;[/code:1ee5c]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2007-8-25 17:56:11 | 只看该作者

Re: 请教一个关于时间格式转换的问题

我已经找到问题的答案了~~

最后发现,原始数据里面的分隔符不是space而是tab。。。。

所以,在infile statement后面加一个 expandtabs 就好了,呵呵。。。

[color=#FF0080:e4c77]但是还有一个问题:
这种处理方法,得出来的sas表中,缺少小时的数据啊。就是说,2002/1/1/18导入后,18点这个信息就没有了,如何解决这个问题呢?[/color:e4c77]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2007-8-26 18:28:41 | 只看该作者

to linwise

我的思路是把“2002/1/1/18”作为字符串读进来,然后用多个字符和日期函数,总之最后变形成01JAN2002:18:00:00的形式,再用input函数datetime19.的informat转换就行了。具体程序你自己写吧。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2007-8-26 22:39:12 | 只看该作者

Re: 请教一个关于时间格式转换的问题

嗯~谢谢指点,我知道该怎么做了。那个project我已经做完,今天下午才吧report写好,希望以后能多多交流!

[color=#FF0000:95d9f]再次感谢!!![/color:95d9f]   <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 07:12 , Processed in 0.090237 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表