【发布时间】:2017-12-12 17:12:04
【问题描述】:
我正在尝试将连续下降的 12 个月数据合并到一个表中。每月数据联接将查看下降序列。但是,我正在努力想出一个逻辑来开发多个宏来运行它。 月份的格式为 YYYYMM。
代码 `
PROC SQL;
CREATE TABLE WANT_YYYYMM AS /* I want the tables on monthly but incremental sequence basis.
For e.g monthly data for 201612 will join with 201701,201702....201711....
monthly data for 201701 will join with 201702,201703....201711 and so on.*/
SELECT (COUNT(A.canc_accts)) AS canc_accts_n,
(COUNT(A.canc_accts)) AS canc_accts_n+1,
(COUNT(A.canc_accts)) AS canc_accts_n+2,
........
(COUNT(A.canc_accts)) AS canc_accts_n+11
FROM HAVEDATA_YYYYMM A
LEFT JOIN HAVE_DATA_YYYYMM+1 B ON (A.ACCT_NO= B.ACCT_NO)
LEFT JOIN HAVE_DATA_YYYYMM+2 C ON (A.ACCT_NO= B.ACCT_NO)
LEFT JOIN HAVE_DATA_YYYYMM+3 D ON (A.ACCT_NO= B.ACCT_NO)
........
LEFT JOIN HAVE_DATA_YYYYMM+11 G ON (A.ACCT_NO= B.ACCT_NO)
GROUP BY A.Fees;
QUIT;
` 表 YYYYMMM 的数据应如下所示
canc_n canc_n+1 canc_n+2...... canc_n+10 canc_n+11
201612 200 225 250 325 350
201701 222 240 277 312 -
201702 210 232 234 -
.
.
201711 200 - -
在运行月份的宏循环和 canc_n 变量时需要一些帮助。任何帮助构建多个宏或构建它的任何逻辑将不胜感激。
【问题讨论】:
-
为什么是 SQL 而不是数据步骤?
-
你为什么要计算同样的东西?那应该是 COUNT(B....) , COUNT(C....) 吗?
-
您真的有多个以不同 YYYYMM 后缀命名的数据集吗?或者 YYYYMM 的一个数据集中是否有一个字段。希望后者与前者一样,SQL 作为一种声明性语言无法确定标识符名称的逻辑,例如表名,仅包含字段内的数据。
-
我不明白。你有一张表 HAVE_DATA_YYYYMM?它有一个月份列,它是一个格式为“YYYYMM”的字符串?还有一列acct_no?两列一起是表的主键吗?还有第三列 canc_accts 持有一个值?并且您想在网格中显示数据,每个开始月份有一行,列表示开始月份到开始月份 + 11?显示的值是每月 canc_accts 的总和?那么 201612 的 canc_n+1 是否应该与 201701 的 canc_n 相同,因为两者都是 2017 年 1 月的总和?