如何在参数表的行上进行SAS DIS作业循环

如何在参数表的行上进行SAS DIS作业循环,sas,sas-dis,Sas,Sas Dis,我有一个SAS DIS作业,它提取和处理一些时间戳数据。作业的性质是,数据必须逐月一次处理一点。我可以使用时间过滤器来确保任何给定的运行都在所需的时间范围内,但随后我必须手动更改该表的参数,并按月重新运行作业,直到处理完所有数据 由于时间范围可以追溯到很久以前,我希望尽可能地自动化这个过程。理想情况下,我会有一个表格,其形式如下: time_parameter_1 time_parameter_2 2JAN2010 1FEB2010 2FEB2010 1MAR2010 .

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

由于时间范围可以追溯到很久以前,我希望尽可能地自动化这个过程。理想情况下,我会有一个表格,其形式如下:

time_parameter_1 time_parameter_2
2JAN2010       1FEB2010
2FEB2010       1MAR2010
...            ...
这可能是迭代作业的一部分,该作业将继续执行我的处理作业,并将此表的值作为时间参数,直到该表耗尽为止

据我所知,SAS DIS中的循环转换设计为在表上循环,而不是在表的行上循环。解决方案是将每个日期放在一个单独的表中,还是有直接的方法来实现这一点

非常感谢

编辑

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

程序如下:

在要循环的作业的网格视图中,单击鼠标右键并选择“属性”。导航到“参数”选项卡并选择“新建组”。在常规选项卡(让我们使用
控制开始日期
)中命名参数,并在提示类型和值选项卡中选择提示类型“文本”。按OK并使用相同的方法添加任何其他参数(例如,
control\u end\u date
是另一个参数)

创建将在参数化作业上循环的控制作业。导入或创建要循环的参数(日期)表。这些应该是日期的字符表示

将参数表连接到循环转换,将参数化作业连接到循环转换的右端,并将参数化作业的右端连接到循环转换

在循环变换上单击鼠标右键,然后选择“属性”。选择参数映射选项卡,并将控制表日期列正确映射到参数化作业的参数(
control\u start\u date
control\u end\u date
)。在“目标表列”选项卡中,确保参数列映射到目标表。选择OK

在参数化作业中,创建用户编写的代码转换。创建列
start\u date
end\u date
(键入
DATE9.
)并使用以下代码填充输出工作表:

DATA CONTROL_DATES;

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

RUN;
将工作表
工作中的日期连接到作业的逻辑(可能带有联接)上,以使它们作为所需容量的筛选器。保存参数化作业

现在运行控制作业应该能够使用指定的日期筛选器在作业上循环


下面介绍了很多这方面的内容,但我不确定该链接能维持多久,我遇到的一些问题也没有在这里得到解决。

您对循环转换的理解是不正确的。循环转换不需要单独的表来使参数化作业流循环。具有时间参数的表可以作为循环转换的输入,参数化作业可以基于控制表(循环转换的输入表)进行循环

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


如果有帮助,请告诉我

嗨,寿司。我在按照那个文件工作时遇到了麻烦。我想我只是需要更多的时间来消化这些内容,但是现在实现我的目标的压力很大,所以我现在将采用暴力的方法,然后重新查看文档+1但是现在,非常感谢!嗨,寿司。我已经安排好了循环工作。要循环的作业中的参数为
control\u start\u date
control\u end\u date
,类型为date。当我尝试使用提示的测试值运行要删除的作业时,我会收到错误消息“无效的日期/时间/日期时间常量”&control\u start\u date'D”。我是否应该使用另一个表达式来引用作业参数?谢谢在参数化作业流中使用参数(将循环)时,似乎出现了错误。如果在控制表中变量control_start_date&control_end_date格式为date9。然后,参数化作业流中参数的用法类似于my_date>=“&control_start_date”D。若控制表并没有日期格式,那个么用法将类似于my_date>=%unquote(&control_start_date)。请注意,my_date是虚拟表上的日期列。如果仍然有问题,请尝试在参数化作业流中添加用户编写的转换,并放置%put USER;在转换中查看值是如何解析的。嘿,sushil。让我们暂时忘掉控制工作吧。在参数化作业本身上,我有参数
control\u start\u date
control\u end\u date
,它们是日期类型,并且是给定的测试值。在用户编写的代码转换中,我有一条指令:
start\u date='&control\u start\u date'D
。正是该指令给出了上述错误。我的日期应该被编码为字符吗?如果是这样,你知道应该怎么做吗?非常感谢!