我正在创建一个宏变量但是当我在Proc Report中使用相同的宏变量时,这个宏会在值前面生成一个空格
选择COUNT(DISTINCT USUBJID)为:来自DMDD的N1,其中ARMN = 1;
我如何在相同的代码中纠正它?
这实际上是为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 ' '对结果没有影响,只会导致修剪.
这是因为任何宏变量都存储为字符。如果源数据是数字,则 SAS 使用 best12。格式转换为字符,因此结果用前导空格填充。我通过使用去除前导和尾随空白的 CATS 函数来解决这个问题。您不能使用 LEFT 或 STRIP 函数,因为它们仅适用于字符变量。
Select cats(COUNT(DISTINCT USUBJID)) into: N1 from DMDD where ARMN=1;
Run Code Online (Sandbox Code Playgroud)