数据步骤中的字符长度与过程 sql

Character length in data step versus proc sql

使用 SAS proc sql 创建 table 是否有可能将字符变量截断为 255 个字符?跟库引擎类型有关系吗?

我正在使用这样的 PCFILES 库名(注意 dbmax_text 选项):

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

然后我像这样做一个过程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 处被截断,即使它的格式在列 属性 视图中列为 00.。当我将此作为数据步骤执行时,所有字符数据都会通过:

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

我的宏库中嵌入了 40-50 sql 个这样的过程,因此我不希望重构所有宏以使用数据步骤(如果可能的话)。有谁知道

a) 如果在 proc sql 中有一些选项使其遵守 dbmax_text.

b) 关于 SAS 如何处理 proc sql?

的 create table 语句中的字符长度的任何文档

编辑 - 添加一些屏幕截图。

SAS 认为变量的长度为 4000 个字符:

罪魁祸首是 distinct 子句。如果您删除它,列将保持其长度,然后您可以根据需要使用 proc 排序消除重复项。