如何使 SAS DIS 作业循环遍历参数行 table

How to make a SAS DIS job loop over rows of a parameter table

我有一个 SAS DIS 作业可以提取和处理一些时间戳数据。这项工作的性质是必须逐月一次处理一点数据。我可以使用时间过滤器来确保任何给定的 运行 在要求的时间范围内,但我必须手动更改 table 的参数并重新 运行 工作,逐月,直到处理完所有数据。

由于时间框架可以追溯到很久以前,我想尽可能地自动化这个过程。理想情况下,我有一个 table 具有以下形式:

time_parameter_1 time_parameter_2
2JAN2010       1FEB2010
2FEB2010       1MAR2010
...            ...

这可能是迭代作业的一部分,它继续使用此 table 的值作为时间参数执行我的处理作业,直到 table 耗尽。

据我了解,SAS DIS 中的循环转换旨在遍历 table,而不是 table 的行。是将每个日期放在单独的 table 中的解决方案,还是有直接的方法来实现这一点?

非常感谢。

编辑

所以,在的post的帮助下,我确定了一个解决方案。首先,SAS DIS 似乎需要将日期参数作为文本传递,然后转换为所需的日期格式(至少,这是我能让事情正常工作的唯一方法)。

程序如下:

在要循环的作业的网格视图中,右键单击并选择 select 属性。导航到参数选项卡和 select 新组。在“常规”选项卡(让我们使用 control_start_date)和“提示类型和值”选项卡中命名参数 select 提示类型 "Text"。按确定并使用相同的方法添加任何其他参数(假设 control_end_date 是另一个参数)。

创建一个将循环遍历参数化作业的控制作业。导入或创建一个 table 参数(日期)来循环。这些应该是日期的字符表示。

将 table 个参数连接到循环转换,将参数化作业连接到循环转换的右端,并将参数化作业的右端连接到循环结束转换。

右键单击循环转换和 select 属性。 Select 参数映射选项卡并将控制 table 日期列正确映射到参数化作业的参数(control_start_datecontrol_end_date)。在目标 Table 列选项卡中,确保参数列映射到目标 table。 Select 好的。

在参数化作业中,创建一个用户编写的代码转换。创建列 start_dateend_date(键入 DATE9.)并使用以下代码填充输出工作 table:

DATA CONTROL_DATES;

    start_date = input(trim("&control_start_date"),DATE9.);
    end_date = input(trim("&control_end_date"),DATE9.);

RUN;

将工作中的日期 table WORK.CONTROL_DATES 连接到工作的逻辑(可能使用连接),以便它们以所需的容量充当过滤器。保存参数化作业。

现在 运行控制作业应该能够使用指定的日期过滤器循环处理作业。

下面的 PDF 中描述了其中的很多内容,但我不确定 link 会存在多久,而且我遇到的一些问题在那里没有得到解决。

您对LOOP转换的理解有误。您不需要单独的 table for 循环转换来使您的参数化作业流循环。带有时间参数的table可以作为循环变换的输入,参数化作业可以根据控制table进行循环(输入table进行循环变换)。

这是一个循环转换的用法示例,它与 SAS DI Studio 文档中提到的不同,并且与您的问题相关:PDF

如果有帮助请告诉我!