我有一个每天早上运行的SAS程序,它接收一个名为" Filename_20141117.txt"的日期的原始数据文件。文件名的最后一部分每天都会更改为当天的日期。
我想让SAS脚本中的INFILE语句更智能,以便知道获取当天的文件。我试图做一个日期连接,像这样:
infile cat(' G:\ Finance \ RawData \ Filename _',year(today()),month(today()),day(today()),' .txt&# 39)
此外,有没有办法在SAS中声明变量并使用它们,而不是在输出中将它们创建为表格?我是一名学习在SAS编程的C / C#/ VB程序员。 我以为我可以制作3个字符串变量 - 日,月和年。使用Day(),Month()和Year()函数使用相应的值填充每个变量,并使用Today()作为日期输入。然后我将采用这3个变量并将它们连接起来以获得我的' 20141118'它将位于.txt文件的末尾。
然而,我并不喜欢这样做。如果有人知道怎么做这将是太棒了。我是SAS编程及其概念的新手。
提前致谢。
答案 0 :(得分:3)
您的陈述的最基本版本是:
INFILE "G:\Finance\RawData\Filename_%sysfunc(today(),yymmddn8.).txt";
完全解释:
%sysfunc
是SAS中的一个宏函数,它允许您在开放代码中使用数据步骤函数,它需要一个(可选两个)参数:
%sysfunc
的第一个参数是有问题的数据步骤函数,在这种情况下,我们需要TODAY()
的值,因此使用它。yymmddn8.
(字面意思是year_year_month_month_day_day,n
代表'无分隔符',8是长度)。 (例如20141118)如果我们要省略第二个参数,我们将获得01JAN1960
以来的天数。
如果我今天要发表声明,它将如下所示:
INFILE "G:\Finance\RawData\Filename_20141118.txt";
此外,由于我们使用的是宏功能,因此需要在此处使用双引号。如果我们使用单引号,它会查找上面字符串未解析值的文件,很可能会失败。
要检查它将解决的问题,只需将%PUT
添加到该行的前面,然后单独运行该行。日志将显示返回的内容。