1

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

基本的に、これら 2 つのメソッドは同じ入力形式を使用していました。最初の方法がうまくいかないのはなぜだろうと思っていました。どんな種類の助けにも感謝します。どうもありがとうございました。

4

1 に答える 1

2

「最初の試行」コードにはいくつかのエラーがありますが、質問を書いているときにそれらが導入されたと思います。

列指向を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;
于 2012-11-30T20:48:34.307 に答える