【发布时间】:2019-08-22 13:10:59
【问题描述】:
我的数据结构如下,每个唯一 ID 都会有一行显示当月最后一天的余额:
ID Day_Key Balance
23412 20171229 50000
23412 20180131 45000
23412 20180228 40000
27435 20171229 100000
27435 20180131 80000
27435 20180228 60000
我想创建一个表,其中每个唯一 ID 显示在一行上,列表示每个月的余额,如下所示:
ID DEC17 JAN 18 FEB18
23412 50000 45000 40000
27435 100000 80000 60000
**更新*
我当前的代码如下所示
PROC SQL;
CREATE TABLE BAL_TRANSPOSE AS
SELECT DISTINCT ID,
MAX(SUB_EY17) AS EY17,
MAX(SUB_JAN18) AS JAN18,
MAX(SUB_FEB18) AS FEB18,
MAX(SUB_MAR18) AS MAR18,
MAX(SUB_APR18) AS APR18,
MAX(SUB_MAY18) AS MAY18,
MAX(SUB_JUN18) AS JUN18,
MAX(SUB_JUL18) AS JUL18,
MAX(SUB_AUG18) AS AUG18,
MAX(SUB_SEP18) AS SEP18,
MAX(SUB_OCT18) AS OCT18,
MAX(SUB_NOV18) AS NOV18,
MAX(SUB_EY18) AS EY18
FROM (SELECT DISTINCT ID,
CASE WHEN DAY_KEY = 20171229 THEN OUTSTANDING_BALANCE END AS SUB_EY17,
CASE WHEN DAY_KEY = 20180131 THEN OUTSTANDING_BALANCE END AS SUB_JAN18,
CASE WHEN DAY_KEY = 20180228 THEN OUTSTANDING_BALANCE END AS SUB_FEB18,
CASE WHEN DAY_KEY = 20180330 THEN OUTSTANDING_BALANCE END AS SUB_MAR18,
CASE WHEN DAY_KEY = 20180430 THEN OUTSTANDING_BALANCE END AS SUB_APR18,
CASE WHEN DAY_KEY = 20180531 THEN OUTSTANDING_BALANCE END AS SUB_MAY18,
CASE WHEN DAY_KEY = 20180629 THEN OUTSTANDING_BALANCE END AS SUB_JUN18,
CASE WHEN DAY_KEY = 20180731 THEN OUTSTANDING_BALANCE END AS SUB_JUL18,
CASE WHEN DAY_KEY = 20180831 THEN OUTSTANDING_BALANCE END AS SUB_AUG18,
CASE WHEN DAY_KEY = 20180928 THEN OUTSTANDING_BALANCE END AS SUB_SEP18,
CASE WHEN DAY_KEY = 20181031 THEN OUTSTANDING_BALANCE END AS SUB_OCT18,
CASE WHEN DAY_KEY = 20181130 THEN OUTSTANDING_BALANCE END AS SUB_NOV18,
CASE WHEN DAY_KEY = 20181231 THEN OUTSTANDING_BALANCE END AS SUB_EY18
FROM TABLE1) AS SUB
GROUP BY ID;
QUIT;
新列已创建,但仅显示空值。以下是我看到的结果(为便于阅读而进行了修剪)。该查询返回超过 1m 条记录,但据我所知,所有记录都有 0 个值。我已经测试过数据并且知道每个 ID 都应该有每个 day_key 的值。
ID EY17 JAN18 FEB18 MAR18 APR18
1111 - - - - -
2222 - - - - -
3333 - - - - -
4444 - - - - -
5555 - - - - -
【问题讨论】:
-
这是一个非常简单的 PROC TRANSPOSE stats.idre.ucla.edu/sas/modules/…
-
你能解释一下标题的“条件满足”部分吗?
-
抱歉 Reeza,我对 SAS 不太熟悉,因此尝试在 PROC SQL 中编写代码。在您的链接上进行了几次尝试,但我无法掌握它的窍门......
-
Richard - 我所说的“条件”是指对于 day_key 的每个新实例,创建一个存储当天余额的列。