Sas 无法解析宏

Sas 无法解析宏,sas,sas-macro,proc-sql,Sas,Sas Macro,Proc Sql,上述代码用于将治疗组中的受试者数量分配给宏观变量,并使用该变量计算上述代码中所示的百分比。写入的宏块没有在datastep TOTAL中得到解决,也没有抛出警告或错误。我认为您的最高级别问题是@DmitryShopin在其评论中提到的。但是,我的答案可能是阻止宏解析的原因 %Total宏中的%If%Then语句需要在末尾再加一个分号。一个分号用于变量赋值语句,一个分号用于%If%Then语句。如果要生成多个变量赋值语句,则每个语句都需要一个结束分号 不确定这是否是唯一一个没有样本数据测试的问题。

上述代码用于将治疗组中的受试者数量分配给宏观变量,并使用该变量计算上述代码中所示的百分比。写入的宏块没有在datastep TOTAL中得到解决,也没有抛出警告或错误。

我认为您的最高级别问题是@DmitryShopin在其评论中提到的。但是,我的答案可能是阻止宏解析的原因

%Total宏中的%If%Then语句需要在末尾再加一个分号。一个分号用于变量赋值语句,一个分号用于%If%Then语句。如果要生成多个变量赋值语句,则每个语句都需要一个结束分号


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

看起来问题在于宏定义中的以下语句:%if ARMN=&i%,则。。。宏语句在打开代码之前编译,因此当%TOTAL编译时,它不知道数据步骤中将出现的变量ARMN。@DmitryShopin您应该将您的注释作为答案,我认为这是核心问题。它应该是数据步骤“if”,而不是宏%if<代码>如果ARMN=&i,则总数=
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 &num;`    
    %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;