Я конвертирую часть своего кода R в SQL PROC для программы в SAS EG (V8.3.2.140), но застрял. Мне нужна помощь в извлечении буквенно-цифровой строки из столбца и создании нового столбца с этой буквенно-цифровой строкой.
В R я использую пакет rebus для создания шаблонов, а затем использую mutate/str_extract, чтобы поместить его в новый столбец.
Узор выглядит следующим образом:
c(
optional(ALPHA) %R%
ALPHA %R%
ALPHA %R%
DGT %R%
DGT %R%
ALPHA %R%
ALPHA %R%
optional(ALPHA) %R%
DGT %R%
optional(DGT) %R%
optional(ALPHA)
)
Таким образом, необязательный символ, за которым следует символ, за которым следует символ, за которым следуют цифры и т. д. Это будет выглядеть так: ABC01DE02 или ABC01DE02A. Мне нужны обе версии.
Положение буквенно-цифрового кода в строке, из которой я пытаюсь его извлечь, может варьироваться, поэтому использование этой позиции не сработает. Однако символы всегда будут заглавными буквами.
Надеюсь, это предоставит достаточно информации для решения.


Это похоже на работу для регулярного выражения. Приведенное ниже регулярное выражение должно сделать это на основе вашего кода и описания:
[A-Z]{0,3}\d{2}[A-Z]{2,3}\d{1,2}[A-Z]
Вы захотите сделать это с помощью шага данных, а не SQL:
data want;
length string $25.;
input string$;
/* Calculate the regex id only once */
retain regexid;
if (_N_ = 1) then
regexid = prxparse('/[A-Z]{0,3}\d{2}[A-Z]{2,3}\d{1,2}[A-Z]?/');
/* If a match is found, extract the string:
1. Get the position and length of the match
2. Extract the match by position and length */
if (prxmatch(regexid, string)) then do;
call prxsubstr(regexid, string, pos, len);
extract = substr(string, pos, len);
end;
drop pos len regexid;
/* In-line sample data */
datalines;
KJ3828ADIJABC01DE02292LZ
FJS9EO2ABC01DE02A92UJDDA
;
run;
string extract
KJ3828ADIJABC01DE02292LZ ABC01DE02
FJS9EO2ABC01DE02A92UJDDA ABC01DE02A
Какое отношение SQL имеет к этому вопросу?