【发布时间】:2020-01-30 22:07:37
【问题描述】:
我正在尝试将 DO 循环从 SAS 复制到 Oracle PL/SQL。基本上,这个 DO 循环遍历表并为单个员工创建多行。我对 PL/SQL 中的循环不是非常熟悉,因此感谢您的帮助。除了创建大量表然后组合它们之外,我想不出任何方法来重新创建它。我会在最后解释更多我的想法;现在,请查看数据示例以及 SAS DO 循环在做什么。
HIST_EMPLOYEE 表:
+----------+----------+--------+
| EMPLOYEE | START_YR | END_YR |
+----------+----------+--------+
| JOHN | 2013 | 2014 |
| WILL | 2012 | 2016 |
| MARK | 2012 | 2012 |
+----------+----------+--------+
SAS 中的 DO 循环:
DATA HIST_EMPLOYEE_NEW;
SET HIST_EMPLOYEE;
DO YR = START_YR TO END_YR;
OUTPUT;
END;
RUN;
输出:
+----------+----------+--------+------+
| EMPLOYEE | START_YR | END_YR | YR |
+----------+----------+--------+------+
| JOHN | 2013 | 2014 | 2013 |
| JOHN | 2013 | 2014 | 2014 |
| WILL | 2012 | 2016 | 2012 |
| WILL | 2012 | 2016 | 2013 |
| WILL | 2012 | 2016 | 2014 |
| WILL | 2012 | 2016 | 2015 |
| WILL | 2012 | 2016 | 2016 |
| MARK | 2012 | 2012 | 2012 |
+----------+----------+--------+------+
我解决这个问题的方法(无论如何不是高效)是创建在END_YR < START_YR + i 上过滤的表,其中i is from 0 to 10,然后创建YR 列,然后合并所有表。我可以进一步讨论这个问题,但我已经觉得这是一种糟糕的做事方式。
【问题讨论】: