每天生成包含交易数据的表格,其中日期在名称中,例如
data_01_12_2014
。
很清楚为什么这种方法是不合需要的,但可能原因是每日表是巨大的,这是一种空间管理机制。无论是什么原因,我的任务是从这些表中获取数据,进行一些转换,并将结果放入结果表中。
我的问题是我希望自动化该过程,并且不希望每天手动注册新的每日表。有没有办法在SAS / SAS DI中自动执行此过程?
非常感激。
答案 0 :(得分:3)
我所做的是创建一个宏变量,并赋予它“01_12_2014”的值。然后,您可以在DI Studio中使用物理名称“libref.Data_& datevar”注册该表。逻辑名称可以是任何内容。 现在,只需更改“datevar”macrovariable的值,同样的工作就可以处理新名称。
在autoexec中,可以编写一个动态设置宏变量的程序。例如,这会将值设置为今天的日期:
data _null_;
call symputx("datevar",translate(put(today(),DDMMYYD10.),"_","-"));
run;
%put &datevar;
希望这有帮助!
答案 1 :(得分:0)
我希望我回答这个问题还不算太晚。今天才看到这个问题。
无论如何,您需要记住的最重要的事情是,显示在元数据文件夹/库存上的注册表只是物理文件的快捷方式。假设您所拥有的DI Studio作业正在从此表中获取输入(在元数据服务器上注册,因为我们假设MYDATA指向10月30日的物理文件data_2015_10_30)。
10月31日,我可以运行以下代码来更新指向第31个数据集的快捷方式,即data_2015_10_31。 tableID宏值是在“基本属性”面板中显示的表的元数据ID(如果它没有显示检查视图 - >基本属性。它应该开始显示在左下角的屏幕上)。此外,我很难编码2015_10_31,但您可以使用宏来获取今天的日期而不是硬编码。把它留给你。
%let tableID=A5LZW6LX.BD000006;
data _null_;
rc=metadata_setattr("omsobj:PhysicalTable?@Id ='&tableID'",
"SASTableName",
"DATA_2015_10_31");
rc=metadata_setattr("omsobj:PhysicalTable?@Id ='&tableID'",
"TableName",
"DATA_2015_10_31");
run;
请注意 DI STUDIO工作可以在您更改或运行上述代码时打开或关闭,但如果它打开则关闭并重新启动,如果工作已关闭,只是打开它会工作。如果你没有重新开始工作,那么与数字相互作用的工作中的转变 MYDATA 仍然会拿起旧表名称而不是更新的表格。此外,上面的代码 CAN NOT 可以作为预编码添加,因为打开作业正在将数据集的所有链接更新到转换中的新物理表,即DI作业中的10月31日。您可以使用上面的代码创建一个新作业,并将其添加到作业流程中,以便在主要作业之前运行。如果你想在预编码中添加它,那么更新的代码会变得复杂和冗长,我会避免。
良好的参考链接:http://support.sas.com/resources/papers/proceedings09/097-2009.pdf