2013-12-14 84 views
0
proc sql noprint; 
    select count(distinct USUBJID) into : N1 - : N4 from DM where upcase(ARM) ^= "SCREEN FAILURE"` 
    group by ARMN; 
quit; 

%macro TOTAL(name=,num=); 
    %do i=1 %to #`  
    %if ARMN=&i %then TOTAL= put(COUNT,3.)||" (" ||right(put(COUNT*100/&&name&num,5.1))||"%) "; 
%end;  
%mend TOTAL;  

data TOTAL;  
    set DS;  
    %TOTAL(name=T,num=4); 
    /*if ARMN=1 then TOTAL= put(COUNT,3.)||" (" ||right(put(COUNT*100/&N1,5.1))||"%) ";*/  
run; 

上述代码是将治疗组中的受试者数量分配给宏变量,并使用相同的代码计算上述代码中显示的百分比。写入的宏块在datastep TOTAL中没有得到解决,也没有发出警告或错误。无法解析宏

+0

貌似问题是这种说法在你的宏定义: %,如果ARMN =&I%,那么... 宏语句编译开放代码做之前,所以当%总量编译因此它不知道你的变量将在数据步骤中发生的ARMN。 –

+0

@DmitryShopin你应该让你的评论成为答案,我认为这是核心问题。 –

+0

它应该是一个datasp'if',而不是一个宏%IF。 '如果ARMN =&我然后TOTAL =' –

回答

2

我认为你的最高级别的问题是@DmitryShopin在他的评论中提到的。但是,我的答案可能是阻止宏解决的问题。

Your%If%然后%Total宏中的语句在结尾处需要另一个分号。一个用于变量赋值语句的分号和一个用于%If%Then语句的分号。如果您正在生成多个变量赋值语句,则每个语句都需要一个结束分号。

不确定这是否是没有样本数据来测试它的唯一问题。