Есть ли функция удаления черточек из цепочки цифр, без удаления начальных нулей? - PullRequest
1 голос
/ 12 ноября 2019

Я хотел бы удалить тире от 3 до 9 цифр. У определенного процента тех чисел есть ведущие нули в них. Я попытался использовать функцию Compress, но это также обнулило нули. Какую функцию лучше всего использовать?

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

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

Функция compress в SAS имеет второй (необязательный) параметр. Если вы не укажете это, функция удалит все пробельные символы. Если вы это сделаете, он удалит указанные символы. Поэтому попробуйте

no_dash = compress(with_dash, '-');

В качестве альтернативы вы можете удалить все нецифровые символы, используя третий (также необязательный) параметр

no_dash = compress(with_dash, '0123456789', 'k');

k указывает на сохранение вместо удаления указанных символов,Вы можете сократить это, добавив d к третьему параметру, указав SAS добавить все цифры ко второму:

no_dash = compress(with_dash, '', 'dk');
0 голосов
/ 12 ноября 2019

Если вы сохранили сжатый результат (с неявным преобразованием) в числовой переменной, эта переменная может нуждаться в формате, чтобы получить желаемый результат.

data _null_;
  my_dashed_text = '000-90-123';
  my_compressed_text = compress(my_dashed_text, '-');

  attrib my_num_var 
    length = 8
    format = z9.
  ;
  my_num_var = compress(my_dashed_text, '-');

  put (_all_) (=/);
run;

------ LOG -----

NOTE: Character values have been converted to numeric values at the places given by:
      (Line):(Column).
      36:16

my_dashed_text=000-90-123
my_compressed_text=00090123
my_num_var=000090123

Числовой формат Z сообщает SASдобавить начальные нули, которые заполняют до указанной ширины при отображении числа . Формат имеет фиксированную ширину, поэтому my_num_var из "123-456" и "0-1-2-3-45-6" будет отображать Z9 отформатированное значение 000123456. Форматирование SAS не может сделать числовое значение похожим на 123456 или 0123456 при визуализации с использованием одной спецификации формата (например, Z9)

...