我有一个SAS DIS作业,它可以提取和处理一些带时间戳的数据。作业的性质使得必须逐月处理数据。我可以使用时间过滤器来确保任何给定的运行都在所需的时间范围内,但我必须手动更改该表的参数并逐月重新运行该作业,直到处理完所有数据。
由于时间范围延伸到很远,我希望尽可能自动化这个过程。理想情况下,我有一个表格,其格式如下:
time_parameter_1 time_parameter_2
2JAN2010 1FEB2010
2FEB2010 1MAR2010
... ...
可以是迭代作业的一部分,该作业继续执行我的处理作业,并将此表的值作为时间参数,直到表耗尽为止。
据我所知,SAS DIS中的循环转换旨在循环遍历表,而不是表的行。解决方案是将每个日期放在一个单独的表中,还是有直接的方法来实现这个目标?
非常感激。
修改
所以,在Sushil的帖子的帮助下,我确定了一个解决方案。首先,似乎SAS DIS要求将日期参数作为文本传递,然后转换为所需的日期格式(至少,这是我可以使用的唯一方法)。
程序如下:
在要循环的作业的网格视图中,右键单击并选择“属性”。导航到“参数”选项卡,然后选择“新建组”。在“常规”选项卡中命名参数(让我们使用control_start_date
),然后在“提示类型和值”选项卡中选择“提示类型”“文本”。按OK并使用相同的方法添加任何其他参数(假设control_end_date
是另一个参数)。
创建一个控制作业,该作业将循环参数化作业。导入或创建要循环的参数(日期)表。这些应该是日期的字符表示。
将参数表连接到循环变换,将参数化作业连接到循环变换的右端,并将参数化作业的右端连接到循环结束变换。
右键单击Loop转换并选择Properties。选择“参数映射”选项卡,并将控制表日期列正确映射到参数化作业(control_start_date
和control_end_date
)的参数。在“目标表列”选项卡中,确保将参数列映射到目标表。选择确定。
在参数化作业中,创建用户书写代码转换。创建列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中描述了很多内容,但我不确定该链接能存活多久,而我遇到的一些问题也没有在那里解决。
答案 0 :(得分:1)
您对LOOP转换的理解不正确。您不需要单独的表进行循环转换来进行参数化作业流循环。具有时间参数的表可以是循环变换的输入,参数化作业可以基于控制表(循环变换的输入表)循环。
以下是循环转换的示例用法,它与SAS DI Studio文档中提到的不同,与您的问题相关:PDF
让我知道它是否有帮助!