1

以下のステートメントでSASDOSを使用しようとしていますが、見つかりません。私の理解では、この新しい列にアクセスするには、派生テーブルの形式を使用する必要があります。これは正しいです?もしそうなら、誰かがそれを行う方法について詳しく説明するのを手伝ってもらえますか?

proc sql;
   create table TEST as 
   select 
      DQBBDA AS 'Sbm Date'n,
      case when 'Sbm Date'n > 999999
         then input('1' || substr(put('Sbm Date'n,z8.),3), z7.)
      end as SASDOS format=z7.
   from 
      DB2SCHEMA.ORIGIN
   where 
      SASDOS = 1130314;
quit;
4

2 に答える 2

4

sasfrogがコメントしたように、SAS SQLの新しい列を参照するには、CALCULATEDキーワードを追加する必要があり、クエリではネイティブDB2列を参照する必要があります。例えば:

proc sql;
    create table TEST as 
    select DQBBDA AS 'Sbm Date'n
         , case when DQBBDA > 999999
                then input('1' || substr(put(DQBBDA,z8.),3), z7.)
            end as SASDOS format=z7.
    from DB2SCHEMA.ORIGIN
    WHERE CALCULATED SASDOS = 1130314;
quit;

ただし、実際には、何をしているのかを再考し、DB2の列のみWHEREを使用する句を作成する方法を理解する必要があります。それ以外の場合は、テーブル全体をSASにプルバックする必要があります(おそらく不十分なソリューション)。このような場合は、パススルークエリ(DB2でネイティブSQLを直接実行できる)を使用すると、おそらくより適切に解決されます。

更新:これは、LIBNAME参照からのテーブルではなくSASデータセットを使用した別の(テスト済みの)例です。関数の構文エラーも修正していることに注意してくださいinput(最後のパラメーターは修正し7.ないでくださいz7.)。

data ORIGIN;
  DQBBDA = 11130314; output;
  DQBBDA = 22130314; output;
run;
options validvarname=any;
proc sql;
    create table TEST as 
    select DQBBDA AS 'Sbm Date'n
         , case when DQBBDA > 999999
                then input('1' || substr(put(DQBBDA,z8.),3), 7.)
            end as SASDOS format=z7.
    from ORIGIN
    WHERE CALCULATED SASDOS = 1130314;
quit;
于 2013-03-17T13:45:24.283 に答える
0

計算されたsasdosではなく、sasdosを使用する必要があると思います

于 2013-03-19T17:00:27.543 に答える