1

我正在尝试使用 对我的数据进行子集化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时,代码可以工作。任何人都知道该变量名称的问题是什么?

4

2 回答 2

3

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

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

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

于 2014-12-10T01:24:02.113 回答
0

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

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

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

如果它是另一种类型,那么您需要调整比较器,或者如果您别无选择,请使用 cast。

于 2014-12-09T23:58:44.383 回答