在变量中获取文件名

时间:2015-07-01 10:00:31

标签: sas sas-dis

我正在使用sas DI studio,我正在尝试获取在输入文件名称中写入的日期值,以便在输出文件名中也输入相同的日期。所以首先我需要获取文件名并提取日期,然后将日期放回去。什么是最简单的方法?

2 个答案:

答案 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转换的文件元数据来分别读取和写入文件。

希望这有帮助!