SAS: подстановочные знаки в операторах IF - PullRequest
0 голосов
/ 13 июня 2018

У меня есть набор данных с кодами диагностики пациентов, и мне нужно использовать символы подстановки для классификации их диагнозов.

patientID diagnosis cancer age gender 
1         250.0      0     65    M     
1         250.00     1     65    M     
2         250.01     1     23    M     
2         250.02     0     23    M     
3         250.11     0     50    F     
3         250.12     0     50    F
4.        513.01.    1     34    M

Диагнозы с 5-м символом 0 или 2 необходимо классифицировать как диабет 2 типаи те, которые заканчиваются на 1 и 3, должны быть классифицированы как диабет 1 типа.Однако 250.0 имеет только 4 символа и должен быть классифицирован как тип 2.

Это на шаге данных не работает

if diagnosis_code ='250.%0' then t2dm = 1;
if diagnosis_code ='250.%1' then t1dm = 1;

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Подстановочный знак соответствует шагу DATA, если операторы могут быть сделаны с помощью функции PRXMATCH.PRX означает регулярное выражение Perl.

PRXMATCH ( шаблон регулярного выражения , текст для оценки )

Функция PRXMATCH документация

Пример данных

data have; input
patientID diagnosis_code $ cancer age gender $; datalines;
1         250.0      0     65    M     
1         250.00     1     65    M     
2         250.01     1     23    M     
2         250.02     0     23    M     
3         250.11     0     50    F     
3         250.12     0     50    F
4.        513.01.    1     34    M
run;

Пример кода

data want;
  set have;
  t2dm = prxmatch('/^250\.\d*0$/', trim(diagnosis_code)) > 0;
  t1dm = prxmatch('/^250\.\d*1$/', trim(diagnosis_code)) > 0;
run;

Примечания к коду примера

  • / ограничивает шаблон регулярного выражения
  • ^ совпадение в начале
  • 250 совпадение 250
  • \. совпадение с фактическим периодом
  • \d соответствует цифре
    • \d* соответствует нулю или более цифрам
  • 0 1 соответствует 0 или 1
    • 0$ 1$ соответствует 0 или 1 в конце
  • trim() обрезать текст для оценки, чтобы совпадение в конце работало
  • > 0 amatch вернет позицию p в тексте или 0, если совпадения нет, p > 0 логически оценивается как 0 или 1 и будет присвоено переменной флага
0 голосов
/ 13 июня 2018

Нет необходимости в подстановочных знаках для этого теста.Используйте модификатор двоеточия для проверки префикса кода и функцию substr () для проверки 6-го символа (5-й цифры).

if diagnosis_code='250.0' or
 (diagnosis_code=:'250.' and substr(diagnosis_code,6)='0') then t2dm = 1;
if diagnosis_code=:'250.' and substr(diagnosis_code,6)='1' then t1dm = 1;
...