1

CYYMMDD(Cは20世紀の場合は0、21世紀の場合は1)の形式の日付を標準のSAS日付に変換しようとしています。このコードは、「proc sql」を使用してSASクエリ内に配置されるため、SASの日付をDB2に格納されている日付と比較できます。

例:入力データ= 1130101、出力= '1Jan2013'd

私が試した例は次のとおりです。

(substr(t1.'EffectDate'n,4,2)|| '/' || substr(t1.'EffectDate'n,6,2) || '/' || cast(substr(t1.'EffectDate'n,1,3) AS INTEGER) + 1900)

それはcast()関数に失敗します(存在しないように見えますか?)

また試した:

convert(varchar(10), convert(datetime, right(t1.'EffectDate'n, 6), 12), 101)

しかし、varchar(10)は存在しません。

私のクエリは次のようになります。

proc sql;
create table CLAIMS as select
          t1.CID, 
          t1.MID, 
          t1.DOS 
          OTHER_TABLE.ChangeDate AS EffectDate
      FROM
        SOURCE.REJECTED t1
      INNER JOIN
        EGTASK.OTHER_TABLE
      ON
        t1.DOS >= *Converted_Date*
      [... goes on a couple more lines...]

*Converted_Date*が必要な場所です。

(ただし、この特定のクエリ/結合は必ずしもSQLである必要はないことを明確にする必要があります)

4

1 に答える 1

2

変数を現在のコード化された形式から適切な SAS 日付変数に変換するには、変数を文字列に変換し、INPUT関数を使用して結果を読み取る必要があります。例えば:

data _null_;
  do EffectDate = 1130101,0130101;

     cEffectDate = put(EffectDate,z7.);
     if substr(cEffectDate,1,1) = '0'
         then SASEffectDate = input('19' || substr(cEffectDate,2),yymmdd8.);
         else SASEffectDate = input('20' || substr(cEffectDate,2),yymmdd8.);
     put EffectDate=
       / SASEffectDate=
       / ;
     end;
  format SASEffectDate yymmdd10.;
run;

これは単なる説明であり、少し長文です。元の変数を保持するために、SASEffectDate という名前の新しい SAS 変数を作成します。SAS 変数として取得したら、他に何もする必要はありません。SAS Access 製品は、外部データベースへの参照方法を認識します。

を使用して同様のことを行う例を次に示しPROC SQLます。

data have; /* Just a dummy data set for illustration */
  do EffectDate = 1130101,0130101;
     i+1;
     output;
     end;
run;
proc sql;
   create table want as
   select t2.*
        , case when t2.EffectDate < 999999 /* starts with 0 */
             then input('19' || substr(put(EffectDate,z7.),2),yymmdd8.)
             else input('20' || substr(put(EffectDate,z7.),2),yymmdd8.)
             end as SASEffectDate format=yymmdd10.
    from have t2
    ;
quit;  
于 2013-02-18T01:00:47.060 に答える