Como você atribuir o resultado de uma função macro a uma variável macro no SAS?

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

  •  06-09-2019
  •  | 
  •  

Pergunta

Eu tenho uma macro que cria um timestamp (para acrescentar nomes de arquivo de saída). No entanto, ao invés de ter que lembrar o que variável macro os cessionários macro o valor para, eu preferiria para atribuir uma variável de macro para o resultado da macro (se isso não for suficiente circular).

%let tms= %tms();

Esta é a macro atual ....

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

Como você citar isso para fazê-lo funcionar? Além disso, seria eu apenas remover o "% deixar TMS =" do macro?

Além disso, faria o mesmo trabalho citando para a seguinte declaração ODS tarefa?

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

Obrigado por tomar o tempo ....

Foi útil?

Solução

A macro com um valor de retorno é geralmente chamado de uma função macro. Antes da statment melhorando, se você colocar uma expressão / valor sem um ponto e vírgula, ele irá retornar o valor para o chamador. Se o valor de retorno é em um bloco de if-else, a; seria necessário.

Basicamente, você pode fazer como você sugere e remover o% deixar TMS = de dentro do macro. E sim, eu acredito que ele iria trabalhar com o statment ods atribuição.

%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 outra sugestão, você pode simplificar o código um pouco usando a função compressa insead das funções de digitalização% como esta

%sysfunc(compress(_&tms_date.&tms_time,"-:"));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top