我想将逗号分隔的文本文件转换为管道分隔文件,但我的输入文件名(逗号分隔文件)是变量(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的新手,我们将非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
您应该能够使用filevar
语句中的infile
选项,例如:
data _null_;
enddate=date();
flname1=compress("d:\temp\wq_"||year(enddate)||put(month(enddate),z2.)||".txt");
length x1-x6 $200;
infile myinputfile dsd dlm=',' filevar=flname1 truncover;
file 'C:\temp\pipe.txt' dsd dlm='|';
input x1-x6;
put x1-x6;
run;
documentation解释了有关该选项的更多信息,并在示例5中提供了一个示例。
此致 阿米尔。
答案 1 :(得分:0)
您可能希望实际将此作为宏变量执行 - 这不是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.
是你想要的格式({{ 1}}或类似的)。然后确保使用201506
引号而不是"
引号,因为后者不允许宏变量解析。