我正在使用sas DI studio,我正在尝试获取在输入文件名称中写入的日期值,以便在输出文件名中也输入相同的日期。所以首先我需要获取文件名并提取日期,然后将日期放回去。什么是最简单的方法?
答案 0 :(得分:0)
自动化SAS代码的最佳方法是从系统中提取日期信息,如:
data _null_;
call symput("PERDATE", Compress(put(intnx('month',date(),-1,'end'), YYMMDDn8.)));
run;
从上面一行中,您获得前一个月的YYYYMMDD格式的Perdate
宏变量(-1)。然后你可以根据需要减去这个变量。
%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;
因此,在每次运行中,您只需更改yoru代码中的变量mydate
即可。你不需要改变其他任何东西......
答案 1 :(得分:0)
技巧是正确设置输入和输出文件的EXTERNAL FILE元数据。这是怎么做的。尝试使用现有文件创建EXTERNAL FILE元数据,以便使用格式和信息正确创建列的元数据。创建EXTERNAL FILE元数据后,通过右键单击FILE元数据编辑EXTERNAL FILE元数据并转到属性 - >文件位置选项卡。在文件名部分而不是已存在的文件中,用宏变量替换日期部分。例如,如果文件名是:c:\ Sushil_20150701.txt,请输入c:\ Sushil_& mydatevar..txt。同样在FILE NAME QUOTING部分中,选择“文件名周围的双引号”
输出文件也是如此。由于我们将在输出文件名中的输入文件名上使用& mydatevar宏变量,因此您可以像上面那样使用mydatevar。
完成所有这些工作后,我们最好使用File Reader和File Writer转换的文件元数据来分别读取和写入文件。
希望这有帮助!