如何在sas中的全局变量中移动文件名

时间:2016-02-04 07:54:40

标签: sas

这里我将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

提前致谢。

2 个答案:

答案 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;