我希望将数据集保存到Excel中,并将文件名保存为当前日期。
为了缩小问题范围,我正在寻找能够将excel保存到将这三种内容组合在一起的路径的代码:' / sas / myPath / results',' 3-22 -2018'和' .xlsx'。
我不能说:
%let filePath = '/sas/myPath/results3-22-2018.xlsx';
因为日期会动态更新。 错误是引用cat函数的libname。关于如何解决这个问题的任何想法?
/*Set File Path*/
data _null_;
%let filePath = cats('/sas/myPath/results', '3-22-2018', '.xlsx');
run;
/*Output to excel*/
libname excelOut XLSX &filePath;
data excelOut.Sheet1;
set results;
run;
libname excelOut clear;
答案 0 :(得分:1)
无需使用任何函数来连接宏代码中的文本。宏代码中的所有内容都是文本。只需展开要在其生成的代码中使用其值的宏变量。
%let datestr=3-22-2018;
%let filePath = "/sas/myPath/results&datestr..xlsx";
如果要构建带引号的字符串,请确保使用双引号而不是单引号。宏处理器不会在单引号内扩展宏触发器。请注意,宏处理器使用宏变量名后面的句点来指示名称的结尾。因此,要显示实际时间段,您需要其中两个。一个用于宏处理器,一个将成为生成值的一部分。
还要记住宏处理器能够正常工作并将生成的代码传递给SAS。因此,您的第一个数据步骤将按此顺序执行。
%let filePath = cats('/sas/myPath/results', '3-22-2018', '.xlsx');
data _null_;
run;
请注意,您的数据步骤实际上没有任何内容,也不需要。