Как вы назначаете результат макрофункции для макропеременной в SAS? - PullRequest
2 голосов
/ 27 мая 2009

У меня есть макрос, который создает метку времени (для добавления к именам выходных файлов). Однако вместо того, чтобы запоминать, какой макропеременной макрос присваивает значение, я бы предпочел назначить макропеременную результату макроса (если это не достаточно круто).

%let tms= %tms();

Это текущий макрос ....

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

Как вы цитируете это, чтобы это работало? Кроме того, я бы просто удалил "% let tms =" из макроса?

Кроме того, будет ли работать то же самое цитирование для следующего оператора назначения ODS?

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

Спасибо, что нашли время ....

1 Ответ

6 голосов
/ 27 мая 2009

Макрос с возвращаемым значением обычно называется функцией макроса. Перед исправлением положения, если вы поместите выражение / значение без точки с запятой, оно вернет значение вызывающей стороне. Если возвращаемое значение находится в блоке if-else, то; будет необходимо.

По сути, вы можете сделать так, как вы предлагаете, и удалить% let tms = из макроса. И да, я верю, что это сработает со статусом назначения шансов.

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

В качестве другого предложения вы можете несколько упростить код, используя функцию сжатия вместо функций% scan, подобных этой

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