【问题标题】:PROC SQL error: "ERROR: Expression using equals (=) has components that are of different data types."PROC SQL 错误:“错误:使用等于 (=) 的表达式具有不同数据类型的组件。”
【发布时间】:2014-12-09 21:38:15
【问题描述】:

我正在尝试使用 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 时,代码可以工作。有谁知道那个变量的名字有什么问题吗?

【问题讨论】:

  • 您是否尝试过将1 放在单引号中,例如AND TNM_CLIN_STAGE_GROUP = '1';

标签: sql sas proc-sql


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    在进行相等之前,请检查您要比较的内容。

    检查 ncbd 表的结构,特别是 TNM_CLIN_STAGE_GROUP 的字段类型

    你会看到真正的类型,如果它是一个varchar,你需要像@JChao在is comment中建议的那样使用单引号。

    如果是另一种类型,那么你需要调整比较器,如果你别无选择,则使用强制转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多