宏变量在Proc SQL中创建宏变量时生成空间

Nim*_*_ZZ 2 macros sas

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

选择COUNT(DISTINCT USUBJID)为:来自DMDD的N1,其中ARMN = 1; 在此输入图像描述 我如何在相同的代码中纠正它?

Joe*_*Joe 6

这实际上是为PROC SQL SELECT INTO"按设计工作".虽然所有其他答案在某些方面都是正确的,但这是一个特殊情况,而不是普通的宏变量,例如

%let var=          5       ;
%put [&var];
Run Code Online (Sandbox Code Playgroud)

只会返回的地方

[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`;
Run Code Online (Sandbox Code Playgroud)

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

如果您只选择单个值,则添加separated by ' '对结果没有影响,只会导致修剪.


Lon*_*ish 5

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

Select cats(COUNT(DISTINCT USUBJID)) into: N1 from DMDD where ARMN=1; 
Run Code Online (Sandbox Code Playgroud)