1

一个很基础的问题。

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

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

aaaaa 将等于 '[' ,我期望 '[hello]'

我需要aaaaa在多个步骤中定义,因为我需要aaaaa使用 do 循环(具有不可预测的长度)来构建,我不能aaaaa一步定义。

谢谢!

4

3 回答 3

3

首次调用 aaaaa 时,SAS 将为变量分配一个长度。在这种情况下length aaaaa $1,您只分配一个字符。SAS 数据类型不是动态的。通过为您的变量分配一个覆盖最大预期长度的固定长度来开始您的数据步骤,例如

data want;
    length aaaaa $300;
    aaaaa='[';
    aaaaa=cats(aaaaa,'hello');
    aaaaa=cats(aaaaa,']');
    put aaaaa;
run;
于 2016-07-14T09:06:26.310 回答
1

您可以在数据步骤中添加attribformat声明:

data want;
   attrib 
      aaaaa format=$200.;
   aaaaa='[';
   aaaaa=cats(aaaaa,'hello');
   aaaaa=cats(aaaaa,']');
   put aaaaa;
run;
于 2016-07-14T09:06:26.363 回答
0

根据我的评论,这是使用call cats.

data want;
length aaaaa $300;
call cats(aaaaa,'[');
call cats(aaaaa,'Hello');
call cats(aaaaa,']');
run;
于 2016-07-14T12:44:50.520 回答