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;

上記のコードは、治療グループの被験者数をマクロ変数に割り当て、それを使用して上記のコードに示すようにパーセンテージを計算します。書き込まれたマクロ ブロックは、データステップ TOTAL で解決されず、警告またはエラーをスローしていません。

4

1 に答える 1

2

あなたの最高レベルの問題は、@DmitryShopin がコメントで言及していることだと思います。ただし、私の答えは、マクロの解決を妨げているものかもしれません。

%Total マクロ内の %If %Then ステートメントには、末尾に別のセミコロンが必要です。変数代入ステートメント用の 1 つのセミコロンと、%If %Then ステートメント用の 1 つのセミコロン。複数の変数割り当てステートメントを生成する場合は、それぞれに末尾のセミコロンが必要です。

テストするためのサンプルデータがなければ、これが唯一の問題かどうかはわかりません。

于 2013-12-14T18:15:28.263 に答える