1

基本的に、入力形式を使用して乱雑なデータを SAS に読み込もうとしていますが、問題があります。生のtxtファイルに次の形式のデータの列があります。

RegDate
0
0
16/10/2002
20/11/2003
0

RegDate の場合、0 = 欠落、それ以外の場合、日付は存在します。このデータを SAS に読み込み、ゼロに「NA」、日付に日付を指定して、データセットに出力したいと思います。

すべての日付が存在する場合、コードを使用できます

data test;
      %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
      infile "&pathlocation" delimiter='09'x
        MISSOVER DSD firstobs=2 ;
        informat RegDate ddmmyy10. ;
        format RegDate ddmmyy10. ;
        input
         RegDate;
      if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro     variable */
run;

ただし、入力形式が日付を読み取るように設定されているため、ゼロが考慮されていないため、これを行っている上記のテキスト ファイルを読み取ることができません。

proc import ステートメントを使用する場合

proc import datafile="&pathlocation" out=test dbms=tab replace;
run;

best32 を使用しようとします。最初の行にゼロがあるためです。日付を読み込むことはできません。

そのため、何らかのカスタム フォーマットを作成する必要があります。これは、数値入力形式のみ、文字入力形式のみ、または画像入力形式 (日付に必要ですか?) に対して実行できます。1 つの変数に対して複数の形式を組み合わせる方法がわかりません。解決策は非常に簡単だと思いますが、オンラインで見つけることができないため、これが明らかな場合はお詫び申し上げます。a) IF-THEN ステートメントをフォーマットに入れ、入力に応じて異なる処理を行う方法はありますか? b) フォーマットを使用する必要があるように、純粋にテキストとしてデータを読み取ります。

4

2 に答える 2

0

次のように、IF ステートメントを DATA ステップに追加できます。

data test;
  infile "&pathlocation" delimiter='09'x
    MISSOVER DSD firstobs=2 ;
    informat RegDate ddmmyy10. ;
    format RegDate ddmmyy10. ;
    input 
       RegDate;
    if RegDate = 0 then RegDate = .;
run;

出力は

   RegDate
         .
         .
16/10/2012
20/11/2003
         .
于 2015-12-28T11:25:24.877 に答える