为什么SAS字符串concat不能涉及变量本身?

时间:2014-12-19 02:18:56

标签: sas

这个问题让我发疯。在SAS中,当我想要连接字符串时,将不会在输入中使用将分配给结果的变量。

DATA test1;
    LENGTH x $20;
    x = "a";
    x = x || "b";
RUN;

结果:x =“a”;

DATA test2;
    LENGTH x $20;
    y = "a";
    x = y || "b";
RUN;

结果:x =“ab”;

DATA test3;
    LENGTH x $20;
    x = "a";
    y = x;
    x = y || "b";
RUN;

结果:x =“a”;

最后一个是如此奇怪。 x甚至没有直接参与concat。

这没有意义。因为1)你可以用这种方式做其他操作,例如transtrn,substr。 2)SAS不提供任何警告信息。

为什么?

2 个答案:

答案 0 :(得分:5)

这是因为X的长度最初设置为20,所以它有19个尾随空白。如果添加b,则由于尾随空白而没有空间。在cat操作符之前修剪x或使用catt。您可以使用lengthc查看字符变量的长度。

DATA test1;
    LENGTH x $20;
    x = "a";
    len=lengthc(x);
    x = trim(x) || "b";
   *x = catt(x, b);
RUN;

proc print data=test1;
run;

答案 1 :(得分:0)

您还可以在等式的左侧使用substr()。像这样:

substr(x,10,1) = 'a';

将第10辆车设置为“ a”。然后循环遍历x中的每个字符(其中10是)。