2013-12-14 135 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語句的分號。如果您正在生成多個變量賦值語句,則每個語句都需要一個結束分號。

不確定這是否是沒有樣本數據來測試它的唯一問題。