SAS: выберите строку с пробелом в конце - PullRequest
0 голосов
/ 26 июня 2018

У меня проблема при выборе данных из таблицы Oracle. Некоторые значения R, RJ и т. Д. Однако, когда я запускаю следующий запрос, я просто получаю RJ:

proc sql noprint;
    SELECT col
    FROM myoracletable
    WHERE col IN('R','RJ')
    ;
quit;

Итак, я проверил значение R в Oracle:

select distinct rawtohex(col) as col
from myoracletable;

Результат для R равен 5220. Итак, строка R[blank]. Я изменил свою программу SAS следующим образом:

proc sql noprint;
    SELECT col
    FROM myoracletable
    WHERE col IN('R ','RJ','5220'x)
    ;
quit;

Однако записи с R по-прежнему не выбраны.

Как я могу решить эту проблему без обрезки или сжатия строки?

Ответы [ 2 ]

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

SAS использует только строки фиксированной длины и задние заготовки полос, чтобы заставить его работать. Таким образом, похоже, что SAS помещает 'R' вместо 'R ' в базу данных, когда преобразует ваш запрос для вас.

Вместо этого вам нужно написать запрос Oracle напрямую. Поэтому вместо использования неявного синтаксиса, например:

libname myora oracle ... schema=myoraschema ... ;
proc sql ;
SELECT col
  FROM myora.mytable
  WHERE col IN('R ','RJ')
;

Вы должны использовать явный синтаксис, подобный этому:

libname myora oracle ..... ;
proc sql ;
connect using myora ;
select * from connection to myora 
(SELECT col
  FROM myoraschema.mytable
  WHERE col IN('R ','RJ')
 )
;

Долгосрочное решение состоит в том, чтобы исправить таблицу Oracle, чтобы НЕ хранить конечные пробелы. Возможно, вам придется переопределить переменную как VARCHAR (2) вместо CHAR (2).

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

Я не смог воспроизвести это поведение внутри самого SAS:

data have;
input mystr :$2.;
cards;
R
RJ
;
run;

proc sql;
select mystr from have where mystr in ('R', 'RJ');
quit;

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...