【问题标题】:date and time strings cannot be read correctly in SAS在 SAS 中无法正确读取日期和时间字符串
【发布时间】:2012-11-30 20:09:48
【问题描述】:

我有以下示例数据要读入 SAS

2012-05-0317:36:00NYA
2012-05-0410:29:00SNW
2012-05-2418:45:00NYA
2012-05-2922:24:00NSL
2012-05-3107:26:00DEN
2012-05-2606:10:00PHX
2012-05-0202:30:00FTW
2012-05-0220:45:00HOB
2012-05-0103:01:00HGR
2012-05-0120:30:00RCH
2012-05-1112:00:00NAS

但是,有一个奇怪的问题困扰着我。 这是我的第一次尝试。

data test;
    informat DT yymmdd10.
        TM $TIME8.
        orig $3.
    ;
    format DT yymmddd10.
        TM TIME8.
        orig $3.
    ;
    input
        @1 DT_temp 
        @11 TM_temp 
        @19 orig 
    ;
    datalines;
2012-05-0317:36:00NYA
2012-05-0410:29:00SNW
2012-05-2418:45:00NYA
2012-05-2922:24:00NSL
2012-05-3107:26:00DEN
2012-05-2606:10:00PHX
2012-05-0202:30:00FTW
2012-05-0220:45:00HOB
2012-05-0103:01:00HGR
2012-05-0120:30:00RCH
2012-05-1112:00:00NAS
run;

结果显示

DT TM orig
.   .   NYA
.   .   SNW
.   .   NYA
.   .   NSL
.   .   DEN
.   .   PHX
.   .   FTW
.   .   HOB
.   .   HGR
.   .   RCH
.   .   NAS

这意味着日期和时间读取不正确。我现在的一个解决方法是首先将所有内容读取为字符串,然后分别将其转换为日期和时间。

data test;
    informat DT_temp $10.
        TM_temp $8.
        orig $3.
    ;
    format DT yymmddd10.
        TM TIME8.
        orig $3.
    ;
    input
        @1 DT_temp 
        @11 TM_temp 
        @19 orig 
    ;
    DT=input(strip(DT_temp),yymmdd10.);
    TM=input(strip(TM_temp),time8.);

    drop DT_temp TM_temp;
    datalines;
2012-05-0317:36:00NYA
2012-05-0410:29:00SNW
2012-05-2418:45:00NYA
2012-05-2922:24:00NSL
2012-05-3107:26:00DEN
2012-05-2606:10:00PHX
2012-05-0202:30:00FTW
2012-05-0220:45:00HOB
2012-05-0103:01:00HGR
2012-05-0120:30:00RCH
2012-05-1112:00:00NAS
run;

这样,一切都得到了正确的格式。

orig DT TM
NYA 2012-05-03  17:36:00
SNW 2012-05-04  10:29:00
NYA 2012-05-24  18:45:00
NSL 2012-05-29  22:24:00
DEN 2012-05-31  7:26:00
PHX 2012-05-26  6:10:00
FTW 2012-05-02  2:30:00
HOB 2012-05-02  20:45:00
HGR 2012-05-01  3:01:00
RCH 2012-05-01  20:30:00
NAS 2012-05-11  12:00:00

基本上,这两种方法使用相同的信息。我想知道为什么第一种方法不起作用。感谢任何形式的帮助。非常感谢。

【问题讨论】:

    标签: date sas informat


    【解决方案1】:

    您的“第一次尝试”代码有几个错误,但我猜它们是在编写问题时引入的。

    因为您使用的是面向列的input,所以您需要指定要用于每个变量的格式。这是一个更正的版本:

    data test;
        informat DT yymmdd10.
            TM TIME8.
            orig $3.
        ;
        format DT yymmddd10.
            TM TIME8.
            orig $3.
        ;
        input
            @1 DT  yymmdd10.
           @11 TM  TIME8.
           @19 orig $3.
        ;
        datalines;
    2012-05-0317:36:00NYA
    2012-05-0410:29:00SNW
    2012-05-2418:45:00NYA
    2012-05-2922:24:00NSL
    2012-05-3107:26:00DEN
    2012-05-2606:10:00PHX
    2012-05-0202:30:00FTW
    2012-05-0220:45:00HOB
    2012-05-0103:01:00HGR
    2012-05-0120:30:00RCH
    2012-05-1112:00:00NAS
    run;
    

    【讨论】:

    • 谢谢。我只是想通了这一点并且厌倦了回答我自己的问题。显然,你的速度要快得多。再次感谢您。
    猜你喜欢
    • 2020-03-26
    • 2021-12-19
    • 2018-06-24
    • 2015-07-21
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多