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



我有一个每天早上运行的SAS过程,它接收当天一个名为"Filename_20141117.txt"的原始数据文件。文件名的最后一部分每天都会更改为当天的日期。

我想使 SAS 脚本中的 INFILE 语句更智能,以便它知道获取当天的文件。我试图做一个日期串联,像这样:

infile cat('G:\Finance\RawData\Filename_',year

(today()),month(today()),day(today()),'.txt')

另外,有没有办法声明变量并在 SAS 中使用它们,而不是将它们创建为输出中的表?我是一名 C/C#/VB 程序员,正在学习用 SAS 编程。我在想我可以制作 3 个字符串变量——日、月和年。 使用 Day()、Month() 和 Year() 函数用相应的值填充每个变量,并将 Today() 作为日期输入。然后我将采用这 3 个变量并将它们连接起来以获得位于.txt文件末尾的"20141118"。

但是它不喜欢我这样做。 如果有人知道如何做到这一点,那就太棒了。我对SAS编程及其概念非常陌生。

提前谢谢。

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

INFILE "G:FinanceRawDataFilename_%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:FinanceRawDataFilename_20141118.txt";

此外,此处需要使用双引号,因为我们使用的是宏函数。如果我们使用单引号,它将查找具有上述字符串未解析值的文件,并且很可能会失败。

要检查它将解析的内容,只需将%PUT添加到行的前面,然后隔离运行该行。日志将显示返回的内容。

最新更新