Proc SQL报错ERROR 22-322:END AS "Z"处需名称,求排查
解决SAS PROC SQL中的"ERROR 22-322: Expecting a name."问题
这个错误的根源在于SAS默认的标识符解析规则和你用双引号定义列名的方式冲突了。默认情况下,SAS的QUOTED_IDENTIFIER选项是关闭的,这时候双引号会被当作字符串常量处理,而不是列名——所以SAS看到AS "Z"时,会误以为你要把字符串"Z"当成列的别名,这显然不符合它对列名的要求,于是抛出“期待一个名称”的错误。
你可以用以下几种方法解决:
方法1:直接去掉双引号(推荐)
因为你的列别名是单个字母Z,没有特殊字符或空格,完全不需要引号包裹,直接写即可:proc sql; SELECT CASE WHEN REGION IS NULL THEN ZONE ELSE REGION END AS Z, /* 后续代码 */ quit;方法2:使用SAS名称字面量
'列名'n格式
如果后续需要定义包含特殊字符的列名,这种方式更通用,不受系统选项影响:proc sql; SELECT CASE WHEN REGION IS NULL THEN ZONE ELSE REGION END AS 'Z'n, /* 后续代码 */ quit;方法3:开启
QUOTED_IDENTIFIER选项
如果你坚持要用双引号定义列名,可以先开启这个选项,让SAS把双引号内的内容识别为列名:options quoted_identifier=on; proc sql; SELECT CASE WHEN REGION IS NULL THEN ZONE ELSE REGION END AS "Z", /* 后续代码 */ quit; options quoted_identifier=off; /* 可选:用完后恢复默认设置 */
内容的提问来源于stack exchange,提问作者sklal
相关产品推荐
相关产品推荐

