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

Jfl*_*fly 3 sas

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

DATA test1;
    LENGTH x $20;
    x = "a";
    x = x || "b";
RUN;
Run Code Online (Sandbox Code Playgroud)

结果:x ="a";

DATA test2;
    LENGTH x $20;
    y = "a";
    x = y || "b";
RUN;
Run Code Online (Sandbox Code Playgroud)

结果:x ="ab";

DATA test3;
    LENGTH x $20;
    x = "a";
    y = x;
    x = y || "b";
RUN;
Run Code Online (Sandbox Code Playgroud)

结果:x ="a";

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

这根本不符合逻辑.因为1)你可以用这种方式做其他操作,例如transtrn,substr.2)SAS不提供任何警告信息.

为什么?

Ree*_*eza 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;
Run Code Online (Sandbox Code Playgroud)