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

Issue combining text to make a libname address in SAS

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

不需要使用任何函数来连接宏代码中的文本。宏代码中的一切都是文本。只需在要在生成的代码中使用其值的位置展开宏变量。

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

请注意,您的数据步骤实际上什么也没做,也不需要。