我正在创建一个宏变量,但是当我在Proc Report中使用相同的宏变量时,这个宏会在值前面生成一个空格
选择COUNT(DISTINCT USUBJID)为:来自DMDD的N1,其中ARMN = 1; 我如何用相同的代码纠正它?
答案 0 :(得分:6)
这实际上是按照设计工作的#39; for 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中引入的(默认情况下,非修剪选择没有分隔符。)
如果您只选择一个值,添加separated by ' '
除了导致修剪外,不会对您的结果产生影响。
答案 1 :(得分:4)
这是因为任何宏变量都存储为字符。如果源数据是数字,则SAS使用best12。格式转换为字符,因此结果填充前导空格。我通过使用CATS功能来消除前导和尾随空白。您不能使用LEFT或STRIP函数,因为它们只能用于字符变量。
Select cats(COUNT(DISTINCT USUBJID)) into: N1 from DMDD where ARMN=1;
答案 2 :(得分:2)
使用%cmpres()
宏删除空白。
答案 3 :(得分:0)
Select trim(put(COUNT(DISTINCT USUBJID), 16. -L)) into: N1 from DMDD where ARMN=1;
使用PUT()使用-L(左)对齐格式化输出字符串。