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

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

0 голосов
/ 15 февраля 2019

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

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.

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Нет операции 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;
0 голосов
/ 15 февраля 2019

Альтернативный критерий выбора может использовать сопоставление шаблона регулярного выражения 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)
0 голосов
/ 15 февраля 2019

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

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

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

WHERE CustomerName LIKE 'a%' Находит любые значения, начинающиеся с "a"WHERE CustomerName LIKE '% a' Находит любые значения, заканчивающиеся на «a»WHERE CustomerName LIKE '% or%' Находит любые значения, которые имеют "или" в любой позицииWHERE CustomerName LIKE ' r%' Находит любые значения, которые имеют "r" во второй позицииWHERE CustomerName LIKE 'a % _%' Находит любые значения, которые начинаются с "a" и имеют длину не менее 3 символовWHERE ContactName LIKE 'a% o' Находит любые значения, которые начинаются с "a" и заканчиваются на "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';
...