2017-07-24 3 views
1

Nachdem ich einen Wert in einer Variablen haben:Zuweisen Funktionsausgabe zu einer Makrovariable

select max(input(record_date, yymmdd10.)) into :LastDate from My_TABLE; 

(record_datechar a ist, ist der Ausgang des oben 23JUL2017).

Wie würde ich diesen Wert manipulieren? Nehmen wir an, ich wollte es um einen Tag verringern. Wenn ich tun:

%let LastDate = intnx("day", &LastDate, -1); 

Der Wert von LastDate wird buchstäblich intnx("day", 21023, -1), während ich für 22Jul2017 oder 21022 gehofft wurde.

+0

Sie sprechen über das Zuweisen von Werten zu Variablen, aber Ihr Code alles über das Zuweisen von Werten zu MACRO-Variablen. Makrovariablen sind völlig anders als Variablen in Datensätzen. – Tom

+0

Titel korrigiert – Ben

Antwort

4

Wenn Sie SAS-Funktionen in Makrocode verwenden möchten, müssen sie in die Makrofunktion %sysfunc() eingebunden werden. Denken Sie auch daran, dass Sie im Makrocode keine Anführungszeichen um Zeichenfolgenliterale einfügen müssen, da für den Makroprozessor alles Zeichenfolgen ist.

Aber das scheint wirklich wie Overkill, da Daten nur Zahlen von Tagen sind. Sie können nur eins abziehen.

%let LastDate = %eval(&LastDate -1); 

Oder wenn Sie Datumsliterale wie ‚23JUL2017'd verwenden dann müssten Sie die %sysevalf() Funktion stattdessen verwenden.

Natürlich können Sie auch den Tag abziehen, bevor Sie die Makrovariable erstellen.

select max(input(record_date, yymmdd10.))-1 
    into :LastDate trimmed 
    from My_TABLE 
; 
Verwandte Themen