Comment attribuez-vous le résultat d'une fonction macro à une variable macro SAS?

StackOverflow https://stackoverflow.com/questions/916851

  •  06-09-2019
  •  | 
  •  

Question

J'ai une macro qui crée un horodatage (à ajouter aux noms de fichiers de sortie). Cependant, plutôt que de se rappeler quelle variable macro la macro affecte la valeur, je préférerais attribuer une variable macro au résultat de la macro (si cela ne suffit pas circulaire).

%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? En outre, je voudrais simplement supprimer le "% let = tms" de la macro?

En outre, serait le même travail pour citer l'instruction d'affectation suivante ODS?

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

Merci de prendre le temps ....

Était-ce utile?

La solution

Une macro avec une valeur de retour est généralement appelé une fonction macro. Avant la statment raccommoder, si vous mettez une expression / valeur sans virgule, il retournera la valeur à l'appelant. Si la valeur de retour est dans un bloc if-else, la; serait nécessaire.

En fait, vous pouvez faire comme vous le suggérez et de supprimer le% let = tms à l'intérieur de la macro. Et oui, je crois qu'il travaillerait avec le statment d'affectation 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 la fonction de compression des INSEAD% des fonctions d'analyse comme celle-ci

%sysfunc(compress(_&tms_date.&tms_time,"-:"));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top