2015-07-01 47 views
0

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

回答

0

的最佳方式的Automize您的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; 

然后,你可以每天阅读你的输入文件或按月自动,无需改变输入和输出文件名。例如,如果你在销售类似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在夜的代码。你不需要改变任何东西...

+0

挑战是我想从sas DI中的文件元数据检索日期......即,当输入文件的日期部分发生变化时,输出文件名称将相应更改,而且作业也不需要重新配置。 –

0

诀窍是正确设置输入和输出文件的EXTERNAL FILE元数据。以下是如何做到这一点。尝试使用已存在的文件创建EXTERNAL FILE元数据,以便使用格式和信息正确创建列的元数据。创建EXTERNAL FILE元数据后,通过右键单击FILE元数据并转到Properties - > File Location选项卡来编辑EXTERNAL FILE元数据。在文件名部分而不是已经存在的文件中,用宏变量替换日期部分。例如,如果文件名是:c:\ Sushil_20150701.txt,请输入c:\ Sushil_ & mydatevar..txt。在FILE NAME QUOTING部分中,选择“文件名称周围的双引号”

输出文件也是如此。既然我们要在输出文件名的输入文件名中使用mydatevar宏变量,你可以像上面那样放置mydatevar。

完成这一切后,我们很好地使用文件读取器和文件编写器转换来分别读取和写入文件。

希望这有助于!

+0

文件的写作部分应完全如您所说 - 毫无疑问。但是输入文件名呢?我的意思是如何从文件元数据中设置输入日期的值?(假设文件名是c:\ Sushil_20110728 ..txt) –

+0

好吧,如果您希望宏变量中的日期值可被其他转换访问,您可以在作业流属性的预编码部分中添加逻辑。根据我的回答,以下内容成为文件名:c:\ Sushil_&mydatevar..txt和mydatevar宏变量可以在预编码中添加,例如, %let mydatevar = 20110728; 。如果事情不那么简单,并且需要一个逻辑来获取输入日期,我们可以在预编码部分自己编写逻辑以设置mydatevar的值。 – sushil

+0

是的,为什么应该是代码? –