SAS, преобразование чисел из символьного формата в числовой формат, сохраняя все ведущие нули, но длина чисел НЕ является единообразной

Я работаю в SAS EG, и я пытаюсь преобразовать столбец, имеющий символьный формат, в числовой формат, ТОЧНО, как они отображаются в своем символьном формате. Числа различаются по длине, а некоторые имеют один или два ведущих нуля.

Если я сделаю это одним способом, он избавится от всех ведущих нулей. Еще один способ, который я пробовал, он добавляет начальные нули до такой степени, что он равен самому длинному номеру в столбце, например, 9-значное число с одним ведущим нулем теперь имеет четыре ведущих нуля, потому что самое длинное число в столбце состоит из 12 цифр. . (Надеюсь, это описание имеет смысл).

Я работаю в SAS EG. Когда я запускаю содержимое процедуры, он сообщает мне, что моя существующая переменная является символьной переменной длиной 26. Она пуста как для 'format', так и для 'informat'.

Мне нужно преобразовать его так, чтобы новый столбец представлял собой числовую переменную с длиной 8 и «F12». для форматов и BEST12. для "информации", поскольку я планирую использовать его для сопоставления двух наборов данных.

Я создал следующий набор тестовых данных в «обычном» SAS, но я не уверен, полностью ли воссоздает проблему, над которой я работаю в SAS EG:

data have;
input mrn $1-12;
cards;
118283586928
003875807
038087875
0385709873
0038576830
;
run;

Как видите, у меня есть одно число из 12 цифр (без начальных нулей); два, состоящие из 9 цифр (с одним или двумя ведущими нулями); и два, состоящие из 10 цифр (с одним или двумя ведущими нулями).

Любая помощь будет принята с благодарностью.

Спасибо


person immaprogrammingnoob    schedule 27.10.2020    source источник
comment
Вы говорите, что я планирую использовать его (значение char, преобразованное в числовое значение) для сопоставления двух наборов данных. Числовой формат не учитывается при сопоставлении числовых значений, поэтому вы, вероятно, сможете выбраться из этой кроличьей норы.   -  person Richard    schedule 28.10.2020
comment
В таблице с символьным вариантом значений значимы ли ведущие нули? То есть '00012' и '12' означают два разных случая?   -  person Tom    schedule 28.10.2020
comment
Начальные нули не имеют значения для чисел, они просто для отображения, в чем основная проблема? Откуда вы изначально взяли эти данные?   -  person Reeza    schedule 28.10.2020


Ответы (2)


Вы не можете хранить 26-значные строки точно так же, как числа в SAS. SAS хранит числа как значения с плавающей запятой. Вы можете использовать функцию CONSTANT (), чтобы увидеть конец смежных целых чисел, которые могут быть сохранены точно.

73    data _null_;
74     x=constant('exactint');
75     put x= comma30.;
76    run;

x=9,007,199,254,740,992

Поэтому, если у вас действительно есть значения, длина которых превышает 15 цифр в символьной переменной, вы не сможете преобразовать их в числа.

Но если они состоят всего из 12 цифр, просто преобразуйте строки в числа и сравните числа.

proc sql;
  create table want as 
    select * 
    from a, b
    where a.mrn = input(b.mrn_string,32.)
  ;
quit;
person Tom    schedule 28.10.2020

Невозможно иметь разные форматы в одном столбце SAS. Единственный способ сохранить их внешний вид в одном столбце - это оставить их в виде текста. Если вам нужно провести с ними вычисления, я бы предложил просто создать второй столбец с их числовыми значениями.

Начальные нули можно добавлять к числам с помощью z. формат.

https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000205244.htm

person bumblebear    schedule 28.10.2020