我有一个 SAS DIS 作业,它提取和处理一些带时间戳的数据。这项工作的性质是,必须逐月一次处理一点数据。我可以使用时间过滤器来确保任何给定的运行都在所需的时间范围内,但是我必须手动更改该表的参数并逐月重新运行作业,直到处理完所有数据。
由于时间框架可以追溯到很远,我想尽可能地自动化这个过程。理想情况下,我有一个表格,表格如下:
time_parameter_1 time_parameter_2
2JAN2010 1FEB2010
2FEB2010 1MAR2010
... ...
这可能是迭代作业的一部分,该迭代作业继续使用该表的值作为时间参数执行我的处理作业,直到表用完为止。
据我了解,SAS DIS 中的循环转换旨在循环遍历表,而不是表的行。是将每个日期放在单独的表中的解决方案,还是有直接的方法来实现这一点?
非常感谢。
编辑
因此,在Sushil的帖子的帮助下,我确定了一个解决方案。首先,SAS DIS 似乎需要将日期参数作为文本传递,然后转换为所需的日期格式(至少,这是我可以让事情正常工作的唯一方法)。
程序如下:
在要循环的作业的网格视图中,右键单击并选择属性。导航到参数选项卡并选择新建组。在 General 选项卡中命名参数(让我们使用control_start_date
)并在 Prompt Type and Values 选项卡中选择 Prompt type “Text”。按 OK 并使用相同的方法添加任何其他参数(假设control_end_date
是另一个参数)。
创建一个将循环参数化作业的控制作业。导入或创建要循环的参数(日期)表。这些应该是日期的字符表示。
将参数表连接到 Loop 转换,将参数化作业连接到 Loop 转换的右端,并将参数化作业的右端连接到 Loop End 转换。
右键单击循环转换并选择属性。选择参数映射选项卡并将控制表日期列正确映射到参数化作业的参数(control_start_date
和control_end_date
)。在 Target Table Columns 选项卡中,确保参数列映射到目标表。选择确定。
在参数化作业中,创建用户编写的代码转换。使用以下代码创建列start_date
和end_date
(类型)并填充输出工作表:DATE9.
DATA CONTROL_DATES;
start_date = input(trim("&control_start_date"),DATE9.);
end_date = input(trim("&control_end_date"),DATE9.);
RUN;
将工作表中的日期连接到WORK.CONTROL_DATES
作业的逻辑(可能使用连接),以便它们充当所需容量的过滤器。保存参数化作业。
现在运行控制作业应该能够使用指定的日期过滤器循环作业。
以下PDF中描述了很多内容,但我不确定该链接将存在多长时间,并且我遇到的一些问题没有在那里得到解决。