数据步骤中的字符长度与过程 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 排序消除重复项。
使用 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 排序消除重复项。