【发布时间】:2018-06-18 22:02:51
【问题描述】:
我有一个需要导入 SAS 的文件列表。我需要分配文件名,这样我就不会多次键入相同的行:
filename inf_1_1 'C:\Users\Main_1\final_complete_1.1.csv';
filename inf_1_2 'C:\Users\Main_1\final_complete_1.2.csv';
我尝试编写 %macro 但它无法识别文件名:
%macro FILENAME (I_FROM=1, I_TO=&I_FROM, J_FROM=1, J_TO=&J_FROM);
%local I J;
%do I = &I_FROM %to &I_TO;
%do J = &J_FROM %to &J_TO;
filename inf_&I._&J. 'C:\Users\Main_&I.\final_complete_&I.&J.csv';
%end;
%end;
%mend;
%FILENAME(J_TO=2); */
我确定我做错了,需要从字符串变量中取出文件名。但我不知道该怎么做。
任何帮助将不胜感激。
【问题讨论】:
-
你想在这里做什么?您可以在一个步骤中读取多个文件,也可以将多个文件读取到多个数据集,但都不会使用上述方法。您不需要文件名引用,如果您想为每个文件创建一个,这是可行的。不过,我会使用数据步进函数,而不是打开代码方法。
-
文件名引用是 8 个字符,你有一个宏变量列表,但只传入一个?
-
您好 Reeza,感谢您的评论。所以我创建了 %macro import_main(inf,outdat) 来导入 csv 文件。起初,我认为我应该设置 infile 名称。这就是为什么我需要为每个 csv 文件创建一个文件名列表。
-
不,只需将文件名直接传递给宏。您可以在此处使用数据步骤来调用宏,使用调用执行并使用 CATT 函数来构建您的字符串。
-
我在下面为您提供了几个选项,但未经测试。如果它们不起作用并且您无法调试,请告诉我。这里还有另一种方法:github.com/statgeek/SAS-Tutorials/blob/master/…
标签: loops macros sas filenames