这里我将10个变量声明为:file0到file9,还编写一个从特定位置读取文件名的代码,即:“D:\ CSV_Files \ CSV \”。我想知道如何将文件名分配给相应的声明变量。
注意:“fname”所有文件名。
先谢谢。
%LET file0=;
%LET file1=;
%LET file2=;
%LET file3=;
%LET file4=;
%LET file5=;
%LET file6=;
%LET file7=;
%LET file8=;
%LET file9=;
data _null_;
rc = filename("mydir","D:\CSV_Files\CSV\");
did =dopen("mydir");
if did>0 then do;
num= dnum(did);
do i=0 to num;
fname= dread(did,i);
put fname= ;
end;
end;
run;
OutPut:
fname=ABC.csv
fname=XYZ.csv
fname=ABCd.csv
fname=WXTZ.csv
fname=ABCDE.csv
fname=ABCDF.csv
fname=ABCG.csv
fname=ABCH.csv
fname=ABCl.csv
fname=ABCk.csv
Output that I require:
file0=ABC.csv
file1=XYZ.csv
file2=ABCd.csv
file3=WXTZ.csv
file4=ABCDE.csv
file5=ABCDF.csv
file6=ABCG.csv
file7=ABCH.csv
file8=ABCl.csv
file9=ABCM.csv
提前致谢。
答案 0 :(得分:1)
call symputx(cats('FILE',i),fname);
还有第三个参数' G'或者' L'对于全局或本地范围,您可以选择适合您的方式。而且你真的不需要先用%LET声明FILEn变量。
但是,在创建宏变量的同一数据步骤中有宏变量之后,您可能可以完成工作(可能会生成一些代码)。
答案 1 :(得分:0)
答案如下,但正如另一个答案所示,您应该阅读有关声明宏变量的方法。
调用symputx将您的变量存储在第一个参数中。在这种情况下,它的猫('FILE',i) - 解析为FILE1,FILE2,FILE3等。我也用来定义变量NUM。这是因为数组需要一个大小,你需要在这个位置有一个固定的值。
使用此第一步打开目录并获取文件数并将其存储在宏变量NUM中。
data _null_;
rc = filename("mydir","D:\CSV_Files\CSV\");
did =dopen("mydir");
call symputx ('num', dnum(did), 'g');
rc=close(did);
run;
声明一个大小为NUM的数组,并使用下一步循环遍历每个文件,并以所需格式输出到日志中。
data _null_;
rc = filename("mydir","D:\CSV_Files\CSV\");
did =dopen("mydir");
array FILE(&num.) $128;
do i=1 to &num.;
FILE(i)= dread(did,i);
call symputx(cats('FILE',i),FILE(i),'g');
put file(i)= ;
end;
rc=close(did);
run;