繁体   English   中英

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

[英]SAS - Need to make the filepath used in an INFILE statement dynamic

我有一个每天早上运行的SAS程序,并且该程序每天都会接收一个称为“ Filename_20141117.txt”的原始数据文件。 文件名的最后一部分每天更改为当天的日期。

我想使SAS脚本中的INFILE语句更智能,以便它知道获取当天的文件。 我正在尝试进行日期串联,如下所示:

infile cat('G:\\ Finance \\ RawData \\ Filename _',year(today()),month(today()),day(today()),'。txt')

另外,是否有一种方法可以在SAS中声明变量并使用它们,而不在输出中将它们创建为表? 我是一位学习SAS编程的C / C#/ VB程序员。 我当时以为我可以设定3个字串变数-日,月和年。 使用Day(),Month()和Year()函数,以Today()作为日期输入,用相应的值填充每个变量。 然后,我将采用这3个变量并将其连接起来,以获取位于.txt文件末尾的“ 20141118”。

但是,它不喜欢我这样做。 如果有人知道该怎么做,那就太好了。 我对SAS编程及其概念非常陌生。

提前致谢。

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

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)

如果我们忽略第二个参数, 01JAN196001JAN1960以来的天01JAN1960

如果我今天要运行该语句,它将看起来像这样:

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

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

要检查其解决方案,只需将%PUT添加到该行的%PUT ,然后仅在该行中单独运行即可。 日志将显示返回的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM