gpt4 book ai didi

sas - 如何将宏函数的结果分配给SAS中的宏变量?

转载 作者:行者123 更新时间:2023-12-01 09:09:31 24 4
gpt4 key购买 nike

我有一个创建时间戳的宏(附加到输出文件名)。但是,我宁愿将宏变量分配给宏的结果(如果这不够循环的话),而不是必须记住宏将值分配给哪个宏变量。

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

感谢您抽出时间......

最佳答案

具有返回值的宏通常称为宏函数。在 mend 语句之前,如果您输入不带分号的表达式/值,它将将该值返回给调用者。如果返回值位于 if-else block 中,则 ;将是必要的。

基本上,您可以按照您的建议进行操作并从宏内部删除 %let tms= 。是的,我确实相信它可以与 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**;

作为另一个建议,您可以使用压缩函数而不是像这样的 %scan 函数来稍微简化代码

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

关于sas - 如何将宏函数的结果分配给SAS中的宏变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com