需要catx宏函数 - 在proc sql中catx限制为200个字符

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

我不想使用数据步骤.你能帮我用宏处理器构建代码吗?(第三种方式).谢谢!

fl0*_*r3k 6

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