我试图在proc SQL中使用SAS中的一些SQL代码。 DB2中的原始代码具有正常工作。 我在
处得到以下语法错误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.
有人可以帮助我吗?
答案 0 :(得分:4)
CAST是转换/类型函数 - 即以此格式放置。在SAS中,翻译是替换字母的出现,因此不是相同类别的函数。
我认为您正在寻找将数字转换为字符的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
答案 1 :(得分:0)
sas中不存在强制转换功能。如果直接从sas访问db2表,这可能是一个问题。