#sas
#sas
Вопрос:
В моем коде мэйнфрейма sas как заменить. с 0?
data newlic;
INPUT @1 LICNO $10.;
DATALINES;
203....412
...3300421
9955..032.
;
RUN;
PROC PRINT DATA = NEWLIC;
RUN;
DATA MYDATA;
SET NEWLIC;
ARRAY A(*) _NUMERIC_;
DO I=1 TO DIM(A);
IF A(I) = . THEN A(I) = 0;
END;
DROP I;
RUN;
PROC PRINT DATA = MYDATA;
RUN;
мой требуемый результат
2030000412
0003300421
9955000320
требуется заменить ‘.’ на 0
Ответ №1:
Используйте регулярное выражение для замены всех не алфавитно-цифровых символов на 0:
s/[^0-9a-zA-Z]/0/
Вы можете реализовать замены регулярных выражений в SAS с prxchange()
помощью .
data mydata;
set newlic;
licno = prxchange('s/[^0-9a-zA-Z]/0/', -1, licno);
run;
Комментарии:
1. Hi Stu Sztukowski,
2. Спасибо за быстрый ответ, который вы дали, код работает нормально, но мое основное требование — к любому нечисловому, например, пробелу / мусору / фрахтователю, которые хотят заменить на 0
3. Теперь требуется, чтобы, если лицензия не числовая, не удалялась, вместо этого замените значение на 0.
Ответ №2:
Вы можете использовать функцию TRANSLATE () для замены ненужных символов на ‘0’. Вы можете использовать функцию COMPRESS() с d
модификатором, чтобы найти любые нецифровые символы, которые существуют в значении.
fixed=translate(licno,repeat('0',255),compress(licno,,'d'));
Результаты:
Obs LICNO fixed
1 1234567890 1234567890
2 ABC 9 0000000009
3 203....412 2030000412
4 ...3300421 0003300421
5 9955..032. 9955000320
6 123 1230000000
Комментарии:
1. Привет, Том, спасибо за быстрый ответ, ваш код отличный, но я получаю одну исправленную ошибку 15= TRANSLATE(LICNO,REPEAT(‘0′,255),COMPRESS(LICNO,,’D’)); ОШИБКА: нулевые параметры для СЖАТИЯ недопустимы.
2. пожалуйста, поделитесь каким-нибудь решением вышеуказанной проблемы
3. пожалуйста, дайте какое-нибудь решение вышеуказанной проблемы, спасибо и с уважением, Кришна
4. Вы пытаетесь использовать это в коде SQL? Вы можете просто ввести цифры.
COMPRESS(LICNO,'0123456789')
5. Спасибо и с уважением, Кришна
Ответ №3:
Вы можете использовать метасимвол шаблона регулярных выражений D
для поиска нецифровых символов и замены их 0
при использовании PRXCHANGE()
.
Из полного списка в документации
d
соответствует символу цифры, эквивалентному[0−9]
.
D
соответствует любому символу, который не является цифрой.
Пример:
data have; input
licno $char10.; datalines;
1234567890
ABC 9
203....412
...3300421
9955..032.
123
;
data want;
set have;
fixed = prxchange('s/D/0/', -1, licno);
run;