2017-02-23 5 views
0

Ich versuche zu vergleichen, ob eine Anzahl verschiedener Variablen in der von mir erwarteten Reihenfolge mit einem Makro passiert. Mein Code ist:Makrovariablen mehrfach innerhalb von Datenschritt aufrufen. 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); 

Ich habe viele andere Variablen zu vergleichen. Das Problem ist, wenn ich das Makro ausführe, hat das Ausgangsdataset nur das letzte Paar. In diesem Beispiel wäre das BC. Ich weiß, dass ich mehrere Ausgabedateien erstellen kann und jeder die Paare hat, aber dann müsste ich sie alle wieder zusammenfügen. Wie kann ich ein Dataset erhalten, das alle meine var._Error-Paare & var._Correct und & enthält?

Antwort

1

Ihr Problem besteht darin, dass Sie den Datenschritt zweimal neu schreiben. Das ist nicht nötig. Meistens können Makros Linien in einem Datenschritt sein, nicht ganze Datenschritte.

%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; 

Etwas mehr wie das. Ich würde hier ein paar kleinere Probleme feststellen. Was ist, wenn & Sekunde = & zuerst? Sie wollen keine korrekte und keine Fehler, oder ist das korrekt oder Fehler?

Und ein einfacher Weg, dies zu tun:

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

, dass die gleichen Werte in die Variable in viel weniger Code setzt.

+0

Das hat funktioniert! Was für eine einfache Lösung :) Danke – user3910919

Verwandte Themen