Усечение с функцией COALESCE в PROC_SQL

Я пытаюсь объединить два элемента данных в PROC SQL и получаю усечение. Когда я пробую тот же процесс в наборе данных, я также получаю усечение, но другим способом. Рассмотрим следующее:

data test;
var_a = '111111';
var_b = 12345678;
run;

proc sql;
create table test2 as 
select coalesce(input(var_1, 6.), var2) as var3 format = best14.
from test;
quit;

Это создает числовое поле со значением 111111, а это не то, что мне нужно. Интересно, если я сделаю все это за один шаг данных и изменю свой код следующим образом:

data test;
format var3 best14.
var_a = '111111';
var_b = 12345678;
var3 = coalesce(input(var_1, 6.), var2);
run;

Я получаю вывод числового поля, содержащего 12345678. На самом деле мне нужен шаг SQL, который даст мне числовое поле, содержащее 11111112345678.

Может кто-нибудь посоветовать, почему это усечение происходит при использовании функции COALESCE?

Спасибо


person gdogg371    schedule 09.03.2016    source источник


Ответы (1)


Я думаю, вы неправильно понимаете функцию coalesce(). coalesce() возвращает первое неотсутствующее значение из вашего списка значений, поэтому в данном случае правильно "111111".

Я думаю, вам нужна одна из cat функций, cats().

proc sql;
  create table test2 as 
  select input(cats(var1,var2),14.) as var3 format = best14.
  from test;
quit;

COALESCE > http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a002206368.htm

CATS > http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002256540.htm

person Chris J    schedule 09.03.2016
comment
В самом деле, даже несмотря на то, что определение слияния состоит в том, чтобы объединиться! Я всегда думал, что это странный выбор слова для функции, которую он выполняет. - person Longfish; 09.03.2016
comment
кажется, я неправильно понял... это имя функции вводит в заблуждение, я согласен! - person gdogg371; 09.03.2016