2009-05-27 13 views
2

J'ai une macro qui crée un horodatage (à ajouter aux noms des fichiers de sortie). Cependant, plutôt que de devoir se souvenir de la variable de macro à laquelle la macro attribue la valeur, je préférerais assigner une variable macro au résultat de la macro (si ce n'est pas assez circulaire).Comment affectez-vous le résultat d'une macro-fonction à une variable macro dans SAS?

%let tms= %tms(); 

Ceci est la macro en cours ....

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

Comment citer-vous cela pour le faire fonctionner? De même, est-ce que je supprimerais simplement le "% let tms =" de la macro?

De même, est-ce que les mêmes citations fonctionneraient pour l'énoncé d'attribution de SAO suivant?

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

Merci de prendre le temps ....

Répondre

6

une macro avec une valeur de retour est généralement appelé une fonction macro. Avant la réaffectation, si vous mettez une expression/valeur sans point-virgule, elle renvoie la valeur à l'appelant. Si la valeur de retour est dans un bloc if-else, le; serait nécessaire. Fondamentalement, vous pouvez faire ce que vous suggérez et supprimer le% let tms = de l'intérieur de la macro. Et oui, je crois que cela fonctionnerait avec le statut de cession d'ods.

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

Comme une autre suggestion, vous pouvez simplifier le code un peu en utilisant le INSEAD fonction de compression des fonctions de numérisation% comme celui-ci

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