2017-02-23 97 views
0

我試圖比較一下如果我期望使用宏的順序中發生了多個不同的變量。我的代碼是:在數據步驟中多次調用宏變量SAS

%macro Order (second,first,var); 
data order; 
set data; 
if &second. > &first. then &var._Correct = 1; else &var._Correct = 0; 
if &second. < &first. then &var._Error = 1; else &var._Error = 0; 
run; 
%mend order; 
%order(B,A,AB); 
%order(C,B,BC); 

我有很多其他變量的比較。問題是,當我運行宏時,輸出數據集只有最後一對。在這個例子中,那將是BC。我知道我可以製作多個輸出數據集,每個數據集都有這些對,但是我必須將它們全部重新加入。我如何獲得一個數據集,其中包含我的所有& var._correct和& var._Error對?

回答

1

你的問題是你正在重寫數據步驟兩次。這是不需要的。大多數情況下,像這樣的宏可以是數據步驟中的行而不是整個數據步驟。

%macro Order (second,first,var); 
if &second. > &first. then &var._Correct = 1; else &var._Correct = 0; 
if &second. < &first. then &var._Error = 1; else &var._Error = 0; 
%mend order; 

data order; 
set data; 
%order(B,A,AB); 
%order(C,B,BC); 
run; 

更像這樣的東西。我會在這裏注意一些小問題。如果&秒= &第一?你想要沒有正確的,沒有錯誤,或者是正確的還是錯誤的?

而且更簡單的方式來做到這一點:

%macro Order (second,first,var); 
    &var._correct = (&second. > &first.); *or GE?; 
    &var._error = (&second. < &first.); *or LE?; *only one of these two; 
%mend order; 

這使相同的值到變量中少了很多代碼。

+0

工作正常!多麼簡單的解決方案:)謝謝 – user3910919