ERROR 22-322:语法错误,应为以下之一:使用 CAST

ERROR 22-322: Syntax error, expecting one of the following: using CAST

我正在尝试在 proc SQL 中使用 SAS 中的某些 SQL 代码。 DB2 中的原始代码具有此功能,运行良好。 我在 as

处收到以下语法错误
541         as NC_2,SUM (  CASE WHEN A.R_1='N'    AND A.R_2='N'    AND A.R_4='Y' then 1   else 0
541      ! end ) as NC_4   FROM (  SELECT CASE    WHEN (LENGTH(TRIM(TRANSLATE(cast(ABC_CT  as char(4000)), '
             __
                                                                                            22
                                                                                            202
541      !           ',
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, (, ), *, **, +, ',', -, '.', /, <, <=, <>, =, >, >=, ?, AND, 
              BETWEEN, CONTAINS, EQ, EQT, GE, GET, GT, GTT, IN, IS, LE, LET, LIKE, LT, LTT, NE, NET, NOT, NOTIN, OR, ^, ^=, |, ||, 
              ~, ~=.  

ERROR 202-322: The option or parameter is not recognized and will be ignored.

有人可以帮助我吗?

sas 中不存在强制转换函数。如果您直接从 sas.

访问 db2 table,这可能是个问题

CAST 是一个 conversion/type 函数 - 即以这种格式输入。在 SAS 中,translate 是替换出现的字母,因此不是同一类函数。

我认为您正在寻找将数字转换为字符的 PUT 函数,假设 ABC_CT 是数字。

put(ABC_CT, 4000.)

或者您可以使用 SQL PASS THROUGH,这将 运行 DB2 代码直接在 DB2 服务器上并使用 DB2 语法。 文档中的语法类型示例:

proc sql;
 connect to db2 as db1 (database=sample);
 select *
  from connection to db1
     (select
* from sasdemo.customers
         where
 customer like '1%');
disconnect from db1;
quit;

http://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a001348730.htm