Ошибка PROC SQL: ОШИБКА: выражение с использованием equals (=) содержит компоненты с разными типами данных.

Я пытаюсь разделить свои данные с помощью 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, код работает. Кто-нибудь знает, в чем проблема с именем этой переменной?


person vokey588    schedule 09.12.2014    source источник
comment
вы пробовали поместить 1 в одинарные кавычки, например AND TNM_CLIN_STAGE_GROUP = '1';   -  person SQLChao    schedule 10.12.2014


Ответы (2)


Эта ошибка указывает на различие в типе. SAS имеет только два типа: числовой и символьный, поэтому переменная, вероятно, является символьной; проверьте конкретные значения, но в целом, вероятно, потребуется цитата (одинарная или двойная, в данном случае не имеет значения).

Если это не жестко запрограммированное значение, а значение другой переменной, вы можете использовать PUT для преобразования в символ или INPUT для преобразования в числовое, в зависимости от того, что легче преобразовать на основе данных.

SAS на этапе данных с радостью преобразует это за вас, но в SQL и подобных SQL (операторы WHERE) он не преобразует автоматически символы в числовые и наоборот; вы должны указать правильный тип.

person Joe    schedule 10.12.2014

Прежде чем выполнять равенство, проверьте, что вы пытаетесь сравнить.

Проверьте структуру вашей таблицы ncbd, в частности, тип поля TNM_CLIN_STAGE_GROUP

Вы увидите реальный тип, если это varchar, вам нужно использовать одинарную кавычку, например, @JChao, предлагает в комментарии.

Если это другой тип, вам нужно адаптировать компаратор или использовать приведение, если у вас нет выбора.

person Mançaux Pierre-Alexandre    schedule 09.12.2014