Нужна помощь в Like%

У меня есть небольшой запрос при подобном условии:

proc sql;
  create table test as 
  select *
  from Outlier_32
  where 
    DX1 like between 'B0%' and 'C10' or 
    DX2 like between 'B0%' and 'C10' or
    DX3 like between 'B0%' and 'C10' or
    DX4 like between 'B0%' and 'C10'
  ;
quit;

По сути, у меня есть диапазон диагностики, и я хочу отфильтровать (фильтровать?) данные во всех 4 столбцах dx.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
58
3

Ответы 3

Вы не можете использовать несколько условных операторов SQL like & beteewn в одном условном выражении DX1 like between 'B0%' and 'C10'.

Означает =,<>,like,between условные операторы SQL, вы должны использовать по одному ' Example: WHERE(DX1 LIKE 'B0%' OR DX1 BETWEEN 'B0' AND 'C10').

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

WHERE CustomerName LIKE 'a%' Finds any values that start with "a"
WHERE CustomerName LIKE '%a' Finds any values that end with "a"
WHERE CustomerName LIKE '%or%' Finds any values that have "or" in any position
WHERE CustomerName LIKE 'r%' Finds any values that have "r" in the second position
WHERE CustomerName LIKE 'a
%_%' Finds any values that start with "a" and are at least 3 characters in length
WHERE ContactName LIKE 'a%o' Finds any values that start with "a" and ends with "o"

Я не уверен в типе данных и значениях в вашем столбце DX1, DX2; но что касается вопроса к filter data by range, вы можете использовать оператор between.

WHERE DX1 BETWEEN 'B00' AND 'C10' 
  AND DX2 BETWEEN 'B00' AND 'C10'
  AND DX3 BETWEEN 'B00' AND 'C10' 
  AND DX4 BETWEEN 'B00' AND 'C10';

Операции нет like between. Вы можете использовать усеченные сравнения. Модификатор двоеточия после того, как оператор указывает SAS сравнивать только до длины более короткого аргумента. Обратите внимание, что нет необходимости использовать SQL для чего-то, что может сделать простой шаг данных.

data test ;
  set Outlier_32 ;
  where (DX1 >=: 'B0' and DX1 <= 'C10')
     or (DX2 >=: 'B0' and DX2 <= 'C10')
     or (DX3 >=: 'B0' and DX3 <= 'C10')
     or (DX4 >=: 'B0' and DX3 <= 'C10')
  ;
quit;

В качестве альтернативного критерия выбора можно использовать сопоставление шаблонов регулярных выражений Perl с конкатенацией переменных диагностического кода. Роль конкатенации такая же, как or тестирование отдельных переменных.

where prxmatch ('/(B|C)0/', cats(dx1,dx2,dx3,dx4))

В более широком и долгосрочном смысле эпидемиологического исследования вы можете рассмотреть возможность использования онтологической таблицы, которая сопоставляет коды диагноза с кластером заболеваний или категорией исследования.

dx    category
---   --------
B00   Foo
… 
B99   Foo
C00   Foo
…
C09   Foo

dx будет внешним ключом к основному списку всех диагностических кодов.

Тогда критерии выбора SQL-запроса будут включать наличие коррелированного совпадения подзапроса.

where
  exists (select * from ontology where category = 'Foo' and dx1 = dx) or
  exists (select * from ontology where category = 'Foo' and dx2 = dx) or
  exists (select * from ontology where category = 'Foo' and dx3 = dx) or
  exists (select * from ontology where category = 'Foo' and dx4 = dx)

Другие вопросы по теме