SAS如何在数据步骤期间在同一个变量中多次连接字符串

SAS How to concatenate strings several times in the same variable during a data step

一个非常基本的问题。

为什么我不能像这样更改数据步中的变量?

data want;
   aaaaa='[';
   aaaaa=cats(aaaaa,'hello');
   aaaaa=cats(aaaaa,']');
   put aaaaa;
run;

aaaaa will be equal to '[' , I expect '[hello]'

我需要分多步定义aaaaa,因为我需要用do循环构造aaaaa(长度不可预测),我不能一步定义aaaaa .

谢谢!

当第一次调用 aaaaa 时,SAS 会为变量分配一个长度。在这种情况下 length aaaaa 因为你只分配了一个字符。 SAS 数据类型不是动态的。通过为变量分配一个覆盖最大预期长度的固定长度来启动数据步骤,例如

data want;
    length aaaaa 0;
    aaaaa='[';
    aaaaa=cats(aaaaa,'hello');
    aaaaa=cats(aaaaa,']');
    put aaaaa;
run;

您可以将 attribformat 语句添加到数据步:

data want;
   attrib 
      aaaaa format=0.;
   aaaaa='[';
   aaaaa=cats(aaaaa,'hello');
   aaaaa=cats(aaaaa,']');
   put aaaaa;
run;

根据我的评论,这是使用 call cats 的另一种方法。

data want;
length aaaaa 0;
call cats(aaaaa,'[');
call cats(aaaaa,'Hello');
call cats(aaaaa,']');
run;