我在一个文件夹中有大约 720 个 SAS 数据集(配备了 720 个 SAS 索引文件“.sas7bdnx”),我想将它们转换为 CSV 文件。我知道如何使用 proc export 一次转换一个,但是在一个 SAS 程序中进行所有转换的有效方法是什么?所有数据集都存储在本地 unix 服务器上。
最佳答案
这相当简单,取决于您是否有一些合理的方法在代码中识别它们。
这是简单的答案:
%macro makeCSV(dataset=);
proc export data=&dataset. file="&dataset..csv" dbms=csv replace;
run;
*modify export if needed;
%mend makeCSV;
proc sql;
select cats('%makeCSV(dataset=',memname,')') into :makeCSVlist separated by ' '
from dictionary.tables
where libname='YOURLIB' and memname like 'FORCSV';
quit;
*or whatever logic identifies these 720 or whatnot datasets;
&makeCSVlist; *actually runs the macro calls;
现在,这可能相当慢,但它应该可以工作。更快的不是拥有 720 个数据集,而是一个数据集,并使用 FILEVAR= 选项在数据步骤中写出代码。如果你有大量的变量(因为你必须写出一个 put 语句),这会变得有点困难,但即便如此,你也可以生成类似于我刚刚使用 dictionary.columns 所做的代码。这仍然会生成 720 个 CSV,但速度要快得多,因为它避免了 720 proc 导出调用及其开销。