我有一个 Excel,其中包含一列文件和另一列包含文件夹路径。我想循环遍历文件路径并为它们分配库名称。
卓越:
file_name file_path
file1.txt filepath1
file2.sas7bdat filepath1
file3.xlsx filepath2
file4.txt filepath3
file5.sas7bdat filepath3
我找到了这个解决方案,但是,我有一些来自同一文件夹的文件,并且想将相同的库名称分配给相同的文件夹路径
data want;
set excel_table;
libref = 'LIBR' || put(_n_, Z4.);
rc = libname(libref, file_name,, "access=readonly');
if rc ne 0 then sysmsg = sysmsg();
run;
我可以添加“if.first.filepath...”类型的语句吗?
“file_name”列中的相同文件也都在另一个文件夹(文件夹 A)中。我最终想将“file_name”列中的文件与其他各个文件夹中的文件与文件夹 A 中的相同文件进行比较。我怎样才能首先循环遍历 libnames 和关联的文件进行 proc 比较?
proc compare base = "dynamic libname".file_name compare=folder2.filename;
run;
Libref 指向目录,而不是文件。因此,假设您有一个名为 HAVE 的数据集,其中包含这两列,那么您将希望为每个 FILE_PATH 而不是每个 FILE_NAME 创建一个 libref。 Libref 仅对访问数据集有用。
data ds_list;
set excel_table;
by file_path;
where lowcase(scan(file_name,-1,'.') = 'sas7bdat';
length libnum 8 libref $8 rc 8 sysmsg $200 ;
if first.file_path then do;
libnum + 1;
libref = 'LIBR' || put(_n_, Z4.);
rc = libname(libref, file_path,, 'access=readonly');
if rc ne 0 then sysmsg = sysmsg();
end;
run;
现在您已经定义了一个或多个库引用(重要的是,将生成的库引用名称存储到数据集中),您可以在 PROC COMPARE 代码中使用它们。
但是根本不清楚您想要将它们与哪些数据集进行比较。