sql - 过程 SQL 错误 : "ERROR: Expression using equals (=) has components that are of different data types."

标签 sql sas proc-sql

我尝试使用 PROC SQL 对数据进行子集化,但当我使用变量 TNM_CLIN_STAGE_GROUP 时,出现错误。下面的例子:

PROC SQL; 
create table subset as
select ncdb.*
from ncdb
where YEAR_OF_DIAGNOSIS>2002  
AND SEX = 2
AND LATERALITY IN (1,2,3)
AND HISTOLOGY = 8500
AND TNM_CLIN_STAGE_GROUP = 1;
quit;

ERROR: Expression using equals (=) has components that are of different data types.

当我运行相同的代码,但取出变量 TNM_CLIN_STAGE_GROUP 时,代码可以正常工作。有人知道该变量名称有什么问题吗?

最佳答案

该错误表明类型不同。 SAS只有两种类型,数字和字符,所以变量很可能是字符;验证具体值,但一般来说它可能需要引号(单引号或双引号,在这种情况下并不重要)。

如果它不是硬编码值,而是另一个变量的值,您可以使用 PUT 转换为字符或 INPUT 转换为数字,以更简单的为准根据数据进行转换。

数据步骤中的 SAS 会很乐意为您转换此值,但在 SQL 和类似 SQL(WHERE 语句)中,它不会自动将字符转换为数字,反之亦然;您必须提供正确的类型。

关于sql - 过程 SQL 错误 : "ERROR: Expression using equals (=) has components that are of different data types.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27389333/

相关文章:

mysql - 带条件和的内连接

mysql - 在 MySQL 中查找最长匹配的 ngram

email - 在 SAS 的 Outlook 电子邮件中指定表/列/单元格宽度

postgresql - 将 SAS 9.2 与 Amazon Redshift 连接

loops - 循环遍历表并在 SAS 中加入它们

sql - 使用 sql 查询在 ms Access 中的两个不同列中添加值

sql - Oracle SQL Developer - Ctrl+Enter 运行整个工作表而不是当前行

random - SAS 随机采样

sql - 如何在SAS Proc SQL中编写条件where语句?

sql - 带有 BigInt 的 Teradata 和 SAS