数据步骤与proc sql的字符长度

时间:2016-03-28 18:42:56

标签: sql sas create-table datastep

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

sas column properties showing 4000 length and format

1 个答案:

答案 0 :(得分:1)

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