我有一个大型数据集,大约有100个管理员名称。现在,我需要按管理器名称导出数据,以便每个管理器都有一个数据集。我可以使用宏为每个管理器(本质上是一个类别)创建一个单独的数据集,使用代码:
%macro break(byval);
data &byval;
set final(where=(Project_Manager_Name="&byval"));
run;
%mend;
data _null_;
set final;
by Project_Manager_Name;
if first.Project_Manager_Name then
call execute(%nrstr('%break('||trim(Project_Manager_Name)||')'));
run;
这是我被卡住的地方。我只需要每个文件的.xlsx文件,并在每个文件名的末尾包含管理器的名称,如:
proc export
data = final
dbms = xlsx
outfile = "&OUTPUT.\Final_Report_ManagerName.xlsx"
replace;
run;
我假设我将&byval
宏变量放在outfile名称的某处,但是我仍然得到错误,因为它没有被引用。有什么见解吗?
答案 0 :(得分:0)
要使用PROC EXPORT,您必须编写宏并调用PROC EXPORT 100次。这不是一个很棒的方法。您也可以使用LIBNAME执行相同的操作,但不是100个导出调用,而是在数据步骤中有100个数据集名称,100个选择/何时/输出条件块,用于标识每个管理器的数据。< / p>
更好的方式:
在一天结束时,创建一个导出宏并调用它类似于你如何调用%break宏(或者,更有可能的是,在%break宏中设置导出代码)对你来说可能是最简单的事情。尽管它不是很理想(你正在做的事情的运行时间很长)。
proc export
data = &byval.
dbms = xlsx
outfile = "&OUTPUT.\Final_Report_&byval..xlsx"
replace;
run;
需要进入%break宏才能执行此操作。您还可以跳过byval中的数据步骤,只需将WHERE添加到导出data=final(where=(Project_Manager_Name="&byval"))
。