【问题标题】:Macro variable generating a space while creating a macro variable in Proc SQL在 Proc SQL 中创建宏变量时生成空格的宏变量
【发布时间】:2013-10-02 08:10:50
【问题描述】:

我正在创建一个宏变量,但是当在我的 Proc 报告中使用相同的宏变量时,这个宏会在值前面生成一个空格

选择 COUNT(DISTINCT USUBJID) 到:N1 from DMDD where ARMN=1; 如何在相同的代码中纠正它??

【问题讨论】:

    标签: macros sas


    【解决方案1】:
    Select trim(put(COUNT(DISTINCT USUBJID), 16. -L)) into: N1 from DMDD where ARMN=1;
    

    使用 PUT() 使用 -L(左)对齐来格式化输出字符串。

    【讨论】:

    • 这行代码在值之后给出了一个尾随空格。但是,谢谢。
    【解决方案2】:

    这实际上是 PROC SQL SELECT INTO 的“按设计工作”。虽然所有其他答案在某些方面都是正确的,但这是与普通宏变量相反的特殊情况,例如

    %let var=          5       ;
    %put [&var];
    

    只会返回的地方

    [5]

    虽然这不是这样做的。这是PROC SQL SELECT INTO 的行为,是故意的。

    这两条语句:

    proc sql;
     select name into :name from sashelp.class where name='Alfred';
     select name into :shortname separated by ' ' from sashelp.class where name='Alfred';
    quit;
    %put `&name` `&shortname`;
    

    是不相同的。 separated by ' '(或任何其他分隔符)将始终自动修剪,除非包含 notrim,如果您有 9.3 或更高版本,则有一个新选项 trimmed,如果您打算选择单个选项,则可以使用它多变的。我认为这种行为是在 9.2 中引入的(默认情况下,不修剪 select 而不用分隔符)。

    如果您只选择一个值,添加separated by ' ' 不会对您的结果产生任何影响,只会导致发生修剪。

    【讨论】:

    • +1 不仅提供了有效的修复程序,还解释了细微之处甚至 SAS 版本问题
    【解决方案3】:
    【解决方案4】:

    这是因为任何宏变量都存储为字符。如果源数据是数字,则 SAS 使用 best12。格式转换为字符,因此结果用前导空格填充。我通过使用去除前导和尾随空格的 CATS 函数来解决这个问题。您不能使用 LEFT 或 STRIP 函数,因为它们仅适用于字符变量。

    Select cats(COUNT(DISTINCT USUBJID)) into: N1 from DMDD where ARMN=1; 
    

    【讨论】:

      猜你喜欢
      • 2017-10-04
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多