SAS - 需要使INFILE语句中使用的文件路径动态化

时间:2014-11-18 14:22:25

标签: sas

我有一个每天早上运行的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编程及其概念的新手。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您的陈述的最基本版本是:

INFILE "G:\Finance\RawData\Filename_%sysfunc(today(),yymmddn8.).txt";

完全解释:

  • %sysfunc是SAS中的一个宏函数,它允许您在开放代码中使用数据步骤函数,它需要一个(可选两个)参数:
    1. %sysfunc的第一个参数是有问题的数据步骤函数,在这种情况下,我们需要TODAY()的值,因此使用它。
    2. 第二个参数(可选)提供SAS格式,其中应返回结果。您需要的日期表示的首选SAS格式是yymmddn8.(字面意思是year_year_month_month_day_day,n代表'无分隔符',8是长度)。 (例如20141118)

如果我们要省略第二个参数,我们将获得01JAN1960以来的天数。

如果我今天要发表声明,它将如下所示:

INFILE "G:\Finance\RawData\Filename_20141118.txt";

此外,由于我们使用的是宏功能,因此需要在此处使用双引号。如果我们使用单引号,它会查找上面字符串未解析值的文件,很可能会失败。

要检查它将解决的问题,只需将%PUT添加到该行的前面,然后单独运行该行。日志将显示返回的内容。