【问题标题】:Why SAS string concat cannot involve the variable itself?为什么 SAS 字符串 concat 不能涉及变量本身?
【发布时间】:2019-05-03 23:03:45
【问题描述】:

这个问题让我发疯。在 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 不给出任何警告信息。

为什么?

【问题讨论】:

    标签: sas


    【解决方案1】:

    这是因为 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;
    

    【讨论】:

    • 请注意,xany 初始长度是正确的 - 20 没什么特别的。无论长度是多少,您总是会有一个“完整”变量(完全用空格填充)。
    • 可能还值得一提的是,还有其他“猫”功能......例如cat()catx()cats()catt()catq()。通常这些是比||!! 运算符更好的选择...
    【解决方案2】:

    您也可以在等式的左侧使用 substr()。比如:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多