2016-12-07 3 views
0

Ich habe einen Datensatz namens monatliche Zahlungen, die in einem Ordner befindet ich habe "Training" zugewiesen und es hat eine variable Zahlungen.SAS 9.4 Macro Eval Funktion Probleme

Ich möchte 'Zahlungsart' ausgeben, die "hohe Zahlung" ist, wenn die Zahlung> 400 und "niedrige Zahlung" andernfalls.

Ich halte diesen Fehler

ERROR: DS-00075 : Parsing error occurred while trying to %EVAL an expression: Invalid syntax found in call to %EVAL**

Kann mir jemand sagen, was ich falsch mache?

%LET root=D:\Users\Data; 
libname training "&root."; 

%LET dataset=training.monthlypayments; 
%LET outlib=out; 
%LET outfile=monthlypaymentsclassified; 
%LET variable=payment; 

%IF %EVAL(&VARIABLE.>400) %THEN %DO; 
data &outlib..&outfile.; 
     set &dataset.; 
     paymenttype="high payment"; 
     run; 
%ELSE %DO; 
data &outlib..&outfile.; 
     set &dataset.; 
     paymenttype="low payment"; 
     run; 
%END; 
+0

Warum haben Sie eine '% IF'-Anweisung geschrieben, als Ihre Problembeschreibung etwas beschreibt, das Sie mit einer' IF'- oder 'WHERE'-Anweisung tun würden? – Tom

+0

Ich wurde gerade dieses Skript übergeben, um zu beheben, ich lerne immer noch nur die Grundlagen des Makros. Also sollte ich nur eine If-Anweisung für die Eval-Funktion haben? – PropK

Antwort

4

Wenn Sie eine Teilmenge der Daten auf Werte der Variablen in der Basis der Daten machen, dann müssen Sie normale SAS-Code verwenden und nicht die Makro Logik Aussagen. Wenn Ihre Makrovariable aussieht, sagt sie Ihnen nur, welche Datenschrittvariable in Ihrer IF-Anweisung verwendet werden soll.

data &outlib..&outfile.; 
    set &dataset.; 
    if &variable > 400 then paymenttype="high payment"; 
    else paymenttype="low payment"; 
run; 
+0

Ah! Perfekt. ich verstehe – PropK