PROC SQL错误:";错误:使用equals(=)的表达式具有不同数据类型的组件;

PROC SQL错误:";错误:使用equals(=)的表达式具有不同数据类型的组件;,sql,sas,proc-sql,Sql,Sas,Proc Sql,我试图用PROC SQL对数据进行子集划分,当我使用变量TNM\u CLIN\u STAGE\u 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

我试图用
PROC SQL
对数据进行子集划分,当我使用变量
TNM\u CLIN\u STAGE\u 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\u CLIN\u STAGE\u GROUP
时,代码工作。有人知道该变量的名称有什么问题吗?

在执行相等操作之前,请检查要比较的内容

检查您的ncbd表的结构,特别是TNM_CLIN_STAGE_组的字段类型

您将看到真正的类型,如果是varchar,则需要在is comment中使用单引号,如@JChao suggest


如果是另一种类型,那么您需要调整比较器,或者在没有选择的情况下使用cast。

该错误表示类型不同。SAS只有两种类型,数字和字符,因此变量可能是字符;验证特定的值,但通常可能需要引用(单引号或双引号,在这种情况下无关紧要)

如果它不是硬编码的值,而是另一个变量的值,则可以使用
PUT
转换为字符或
INPUT
转换为数字,以基于数据更容易转换的为准


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

您是否尝试过将
1
放在单引号中,如
和TNM_CLIN_STAGE_GROUP='1'