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