2 Stimmen

Wie weisen Sie das Ergebnis einer Makrofunktion einer Makrovariablen in SAS zu?

Ich habe ein Makro, das einen Zeitstempel (zum Anhängen an Ausgabedateinamen) erstellt. Anstatt mir jedoch merken zu müssen, welcher Makrovariablen das Makro den Wert zuweist, würde ich es vorziehen, dem Ergebnis des Makros eine Makrovariable zuzuweisen (falls das nicht schon rund genug ist).

%let tms= %tms();

Dies ist das aktuelle Makro....

%macro tms ;
    %* Create a Timestamp ;
 %let tms_date= %sysfunc(date(),yymmdd10.) ;  %* Todays date ;
 %let tms_time= %sysfunc(time(),time.) ;      %* Current Time ;

    %* Format mmddyyhhmmss ;
 %let tms=_%scan(&tms_date,1)%scan(&tms_date,2)%scan(&tms_date,3)%scan(&tms_time,1,:)%scan(&tms_time,2,:)%scan(&tms_time,3,:) ;

%mend ;

Wie kann man das zitieren, damit es funktioniert? Würde ich auch einfach das "%let tms=" aus dem Makro entfernen?

Würde das gleiche Zitat auch für die folgende ODS-Zuweisungsanweisung funktionieren?

ods Tagsets.excelxp file="&outname.&tms..xml" style= Styles.XLsansPrinter ;

Danke, dass Sie sich die Zeit genommen haben....

6voto

cmjohns Punkte 4445

Ein Makro mit einem Rückgabewert wird gewöhnlich als Makrofunktion bezeichnet. Wenn Sie vor der Anweisung mend einen Ausdruck/Wert ohne Semikolon einfügen, wird der Wert an den Aufrufer zurückgegeben. Befindet sich der Rückgabewert in einem if-else-Block, so ist das ; erforderlich.

Im Grunde können Sie so vorgehen, wie Sie vorschlagen, und das %let tms= aus dem Makro entfernen. Und ja, ich glaube, es würde mit der ods-Zuweisungsanweisung funktionieren.

%macro tms ;
    %* Create a Timestamp ;
 %let tms_date= %sysfunc(date(),yymmdd10.) ;  %* Todays date ;
 %let tms_time= %sysfunc(time(),time.) ;      %* Current Time ;

        %* Format mmddyyhhmmss ;
 _%scan(&tms_date,1)%scan(&tms_date,2)%scan(&tms_date,3)%scan(&tms_time,1,:)%scan(&tms_time,2,:)%scan(&tms_time,3,:) 
%mend;
%let tms=%tms;
%put **&tms**;

Als weiteren Vorschlag können Sie den Code etwas vereinfachen, indem Sie die Funktion compress anstelle der Funktionen %scan wie folgt verwenden

%sysfunc(compress(_&tms_date.&tms_time,"-:"));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X