2

是否有可能使用 SAS proc sql 创建表会截断 255 个字符的字符变量?它与库引擎类型有关吗?

我正在使用这样的 PCFILES libname(注意 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即使它的格式列$4000.在列属性视图中,也会在 255 处被截断。当我将其作为数据步骤执行时,所有字符数据都来自:

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 个字符:

显示 4000 长度和格式的 sas 列属性

4

1 回答 1

2

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

于 2016-03-30T21:10:25.740 回答