¿Cómo se asigna el resultado de una función de macro a una variable macro en SAS?

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

  •  06-09-2019
  •  | 
  •  

Pregunta

Tengo una macro que crea una marca de tiempo (que se añadirán a los nombres de archivo de salida). Sin embargo, en lugar de tener que recordar lo macro variable de la macro asigna el valor a, yo preferiría para asignar una variable macro para el resultado de la macro (si eso no es suficiente circular).

%let tms= %tms();

Esta es la macro actual ....

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

¿Cómo citar este para que funcione? Además, habría que acabo de quitar el "Let% TMS =" de la macro?

Además, haría el mismo trabajo citando a la siguiente instrucción de asignación SAO?

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

Gracias por tomarse el tiempo ....

¿Fue útil?

Solución

A macro con un valor de retorno generalmente se llama una función macro. Antes de la DECLARACIÓN DE vías de recuperación, si se pone una expresión / valor sin un punto y coma, devolverá el valor de la persona que llama. Si el valor de retorno es en un bloque if-else, el; sería necesario.

Básicamente, se puede hacer lo que usted sugiere, para eliminar su let% = TMS desde el interior de la macro. Y sí, yo creo que trabajaría con la asignación DECLARACIÓN 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**;

Como otra sugerencia, puede simplificar el código de algo mediante el uso de la compresa insead función de las funciones de escaneo% como éste

%sysfunc(compress(_&tms_date.&tms_time,"-:"));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top