发出组合文本以在SAS中创建libname地址

时间:2018-03-22 18:41:16

标签: sas enterprise-guide

我希望将数据集保存到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;

1 个答案:

答案 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;

请注意,您的数据步骤实际上没有任何内容,也不需要。