SQL在查询中访问SAS变量

时间:2013-03-17 06:54:15

标签: sql db2 sas

我正在尝试在下面的声明中使用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;

2 个答案:

答案 0 :(得分:4)

正如sasfrog评论的那样,您需要添加CALCULATED关键字以引用SAS SQL中的新列,您应该在查询中引用本机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中 only 列的WHERE子句;否则必须将整个表拉回SAS(这可能是一个糟糕的解决方案)。使用 pass-thru 查询(您可以直接在DB2中执行本机SQL)可以更好地解决这种情况。

更新:以下是使用SAS数据集而非LIBNAME参考表的另一个(已测试)示例。请注意,我还使用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;

答案 1 :(得分:0)

我认为而不是计算sasdos 你应该使用使用sasdos