Длина символа в шаге данных по сравнению с proc sql

Возможно ли, что создание таблицы с SAS proc sql приведет к усечению символьной переменной до 255 символов? Связано ли это с типом библиотечного движка?

Я использую такое имя библиотеки PCFILES (обратите внимание на параметр dbmax_text):

libname mylib PCFILES PATH = "C:\path\to\my\32bit\MS Acccess.ACCDB" dbmax_text=4000;

Затем я делаю proc sql следующим образом:

proc sql noprint;
   create table work.cbdata as
    select 
        distinct var1,
        var2,
        ...
    from mylib.var2015
    where 
        upcase(var1) = "DIQ" 
    order by var1
  ;
quit;

var2 обрезается до 255, хотя его формат указан как $4000. в представлении свойств столбца. Когда я делаю это как шаг данных, проходят все символьные данные:

data vardb;
  set mylib.var2015;
  if var1 = "DIQ";
run;

У меня есть 40-50 процедур sql, подобных этой, встроенных в мою библиотеку макросов, поэтому я бы предпочел не реорганизовывать все макросы для использования шагов данных (если это вообще возможно). Кто-нибудь знает

а) если в proc sql есть опция, чтобы он уважал dbmax_text.

or

б) любая документация о том, как SAS обрабатывает длину символов в операторах создания таблицы proc sql?

РЕДАКТИРОВАТЬ - добавление скриншотов.

SAS считает, что переменные имеют длину 4000 символов:

Свойства столбца sas, показывающие длину и формат 4000


person Matt Moehr    schedule 28.03.2016    source источник
comment
FORMAT и переменная LENGTH не определяют один и тот же атрибут, хотя один может подразумевать другой.   -  person data _null_    schedule 28.03.2016
comment
@data_null_ ага. Я все об этом знаю. Это другое дело. И длина, и форматы говорят 4000, но сами символьные строки заканчиваются на 255. Я мог бы сделать несколько снимков экрана, если это поможет?   -  person Matt Moehr    schedule 28.03.2016
comment
Сделайте тест, в котором вы считываете данные в набор данных sas, используя data var2015; установите mylib.var2015; запустить; Посмотрите, дает ли это VAR2 так, как вы думаете.   -  person data _null_    schedule 28.03.2016
comment
да. Шаг данных дает переменные, содержащие более 255 символов.   -  person Matt Moehr    schedule 29.03.2016
comment
Можете ли вы попробовать var2 length=4000, вместо просто var2, в предложении select и посмотреть, поможет ли это?   -  person Dominic Comtois    schedule 29.03.2016
comment
@DominicComtois попробовал. Когда я делаю var2 format = $3999. length = 3998,, свойства столбца можно изменить, но данные по-прежнему обрезаются до 255 символов.   -  person Matt Moehr    schedule 29.03.2016
comment
Непонятно ... Может быть, выстрел в темноте, но что, если убрать пункты order by и / или distinct?   -  person Dominic Comtois    schedule 30.03.2016
comment
@DominicComtois удаление отдельного предложения работает. Вздох. Еще одно напоминание о том, что S в SQL означает структурированный, а не стандартный. Если хотите, добавьте его в качестве ответа. Спасибо.   -  person Matt Moehr    schedule 31.03.2016
comment
:) ок я добавлю.   -  person Dominic Comtois    schedule 31.03.2016


Ответы (1)


Виновник - оговорка distinct. Если вы удалите его, столбцы сохранят свою длину, и вы можете удалить дубликаты с помощью процедурной сортировки, если это необходимо.

person Dominic Comtois    schedule 30.03.2016
comment
Ого. Скажите, пожалуйста, такая странность бывает только с движком PCFILES (наказание за чтение из M $ файла?). Кто-то сообщил об этом в службу поддержки SAS как об ошибке? - person Quentin; 31.03.2016
comment
Я не знаю. Это могло быть сочетание факторов. Я бы посоветовал OP обязательно подать отчет об ошибке. - person Dominic Comtois; 31.03.2016