Don*_*eld 1 sas proc-sql sas-macro
它可以是一个虚拟的问题,但我找不到例子.案例如下:
proc sql;
create table set1 as select catx('<', field1, field2 ....) as need_field
from table;
quit;
Run Code Online (Sandbox Code Playgroud)
有了这个代码字段,need_field会减少200的长度,所以它的可预测性如文档所示:
CATX函数向变量返回值,或在临时缓冲区中返回值.从CATX函数返回的值具有以下长度:
•WHERE子句和PROC SQL中最多200个字符
•除WHERE子句外,DATA步骤中最多32767个字符
•从宏处理器调用CATX时最多65534个字符
我不想使用数据步骤.你能帮我用宏处理器构建代码吗?(第三种方式).谢谢!
catx如果length=指定了,但似乎可以返回超过200个字符但所有数据必须适合列.否则你将获得空值.
证明:
data test;
length a b c $400;
a = repeat('A',300);
b = repeat('B',300);
c = repeat('C',300);
output;
a = repeat('A',350);
b = repeat('B',350);
c = repeat('C',350);
output;
run;
proc sql;
create table want as
select catx('<', a, b, c) as temp_list length=1000
from test;
quit;
data _null_;
set want;
a = length(temp_list);
put a=;
run;
Run Code Online (Sandbox Code Playgroud)
在文档中还有:
如果CATX在临时缓冲区中返回一个值,则缓冲区的长度取决于调用环境,并且在CATX完成处理后,缓冲区中的值可能会被截断.在这种情况下,SAS不会将有关截断的消息写入日志.如果变量或缓冲区的长度不足以包含串联的结果,则SAS会执行以下操作:
在DATA步骤和PROC SQL中将结果更改为空值
向日志写入一条警告消息,指出结果被截断或设置为空值,具体取决于调用环境
- 在日志中写入一个注释,显示函数调用的位置,并列出导致截断的参数
_ERROR_在DATA步骤中设置为1