我有一个每天早上运行的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 中的一个宏函数,它允许您在开放代码中使用数据步长函数,但它需要一个(可选两个)参数:%sysfunc
的第一个参数是有问题的数据步函数,在这种情况下,我们想要TODAY()
的值,因此使用它。- 第二个参数(可选)提供应返回结果的 SAS 格式。您需要的日期表示形式选择的 SAS 格式是
yymmddn8.
(字面意思是year_year_month_month_day_day,n
表示"无分隔符",8 是长度)。(例如20141118)
如果我们省略第二个参数,我们将得到自 01JAN1960
年以来的天数。
如果我今天运行该语句,它将如下所示:
INFILE "G:FinanceRawDataFilename_20141118.txt";
此外,此处需要使用双引号,因为我们使用的是宏函数。如果我们使用单引号,它将查找具有上述字符串未解析值的文件,并且很可能会失败。
要检查它将解析的内容,只需将%PUT
添加到行的前面,然后隔离运行该行。日志将显示返回的内容。