我正在使用 sas DI studio,我试图在输入文件的名称中写入一个日期值,以便在输出文件名中也放入相同的日期。所以首先我需要获取文件名和提取日期,然后将日期放回去。最简单的方法是什么?
2 回答
自动化 SAS 代码的最佳方法是从系统中获取日期信息,例如:
data _null_;
call symput("PERDATE", Compress(put(intnx('month',date(),-1,'end'), YYMMDDn8.)));
run;
从上面的行中,您可以获得Perdate
上个月 (-1) 的 YYYYMMDD 格式的宏变量。然后,您可以根据需要从该变量中减去。
%let ayear = %Substr(&PERDATE,1,4); /* ayear is the year in YYYY format */
%let amonth = %Substr(&PERDATE,5,2); /* amonth is the month in MM format */
%let aday = %Substr(&PERDATE,7,2); /* aday is the day in DD format */
%let adate=&ayear&amonth; /* adate is if you want in format YYYYMM */
%put &ayear&amonth;
%put &amonth;
%put &perdate;
然后您可以每天或每月自动读取您的输入文件,而无需更改 INPUT 和 OUTPUT 文件名。例如,如果您以如下格式每月获得销售报告,Sales_YYYYMM
那么您可以在代码中编写如下:
infile sales_&ayear.&amonth.; /* Put Dot after each Macro statement */
Sales_&ayear.&amonth.
会给你Sales_201506
。您可以用同样的方式描述您的输出文件,例如Out=result_&ayear.&amonth.;
data result_&ayear.&amonth.;
set Sales_&ayear.&amonth.;
run;
如果您没有定期获取文件,如果您需要手动输入日期,那么您可以在代码开头为日期编写一个宏变量,然后您始终在代码中使用该宏变量:
%let mydate=201506;
%put &mydate;
因此,在每次运行中,您只需更改mydate
yoru 代码中的变量。您不需要更改任何其他内容...
诀窍是正确设置输入和输出文件的外部文件元数据。这是如何做到这一点的。尝试使用已经存在的文件创建外部文件元数据,以便使用格式和信息正确创建列的元数据。创建外部文件元数据后,通过右键单击文件元数据并转到属性 -> 文件位置选项卡来编辑外部文件元数据。在文件名部分而不是已经存在的文件中,用宏变量替换日期部分。例如,如果文件名为:c:\Sushil_20150701.txt,请输入 c:\Sushil_&mydatevar..txt。同样在文件名引用部分中,选择“文件名周围的双引号”
输出文件也是如此。由于我们将在输出文件名中的输入文件名上使用 &mydatevar 宏变量,因此您可以像上面一样放置 mydatevar。
完成这一切之后,我们可以使用文件元数据和文件读取器和文件写入器转换来分别读取和写入文件。
希望这可以帮助!