sas – 将文件名指定为infile语句中的变量

我想将逗号分隔的文本文件转换为管道分隔文件,但我的输入文件名(逗号分隔文件)是一个变量(flname1).我正在使用stackoverflow成员建议的下面的代码.只要我在infile语句中指定文件名但我不知道如何将文件名指定为变量,代码就可以正常工作 –

data _null_;
   enddate=date();
   flname1=compress("d:\temp\wq_" || year(enddate) || put(month(enddate),z2.) || ".txt");
   length x1-x6 $200;
   infile 'flname1' dsd dlm=',' truncover;
   file 'C:\temp\pipe.txt' dsd dlm='|';
   input x1-x6;
   put x1-x6;
run;

我是SAS新手,非常感谢任何帮助.谢谢!

最佳答案 您可能希望实际将此作为宏变量执行 – 这不是filevar的正常用法(如果您的数据集中包含一堆文件名或其他内容,则可以使用它).

%let filename = d:\temp\wq_%sysfunc(today(),YYMMN6.).txt;
%put &=filename;

data _null_;
  length x1-x6 $200;
  infile "&filename." dsd dlm=',' truncover;
  file 'C:\temp\pipe.txt' dsd dlm='|';
  input x1-x6;
  put x1-x6;
run;

宏变量只是文本替换,因此可以在任何可以输入相同内容的地方使用它们.它们也不需要连接函数 – 只需要在键入单词时连接 – 这样就更容易了.

在这里,我使用%sysfunc告诉SAS执行today()函数,第二个参数告诉它如何格式化它–YYMMN6.是您想要的格式(201506或类似).然后只需确保使用“引号而不是”引号,因为后者不会让宏变量解析.

点赞