我有张像这样的桌子
|=========|=====|==================|==============|===========|===========|
| PREFIX | ID | PREVIOUS_PREFIX | PREVIOUS_ID | VENDOR_1 | VENDOR_2 |
|=========|=====|==================|==============|===========|===========|
| A | 1 | | | JAC | BOA |
|---------|-----|------------------|--------------|-----------|-----------|
| B | 2 | C | 99 | LCH | GS |
|---------|-----|------------------|--------------|-----------|-----------|
| B | 3 | C | 99 | LCH | JPM |
|---------|-----|------------------|--------------|-----------|-----------|我需要把它变成这样的桌子
|=========|=====|==================|==============|===========|===========|
| PREFIX | ID | PREVIOUS_PREFIX | PREVIOUS_ID | VENDOR_1 | VENDOR_2 |
|=========|=====|==================|==============|===========|===========|
| A | 1 | | | JAC | BOA |
|---------|-----|------------------|--------------|-----------|-----------|
| C | 99 | | | GS | JPM |
|---------|-----|------------------|--------------|-----------|-----------|这就是:
PREVIOUS_PREFIX和PREVIOUS_ID的行,它将该行保留为PREVIOUS_PREFIX和PREVIOUS_ID的行:PREFIX与PREVIOUS_PREFIX相同,ID与PREVIOUS_ID相同,VENDOR_1和VENDOR_2是原始行不常见的供应商。
发布于 2015-07-07 06:44:25
一个稍微简单的解决方案是将单个观察扩展为2个观察,并将供应商合并到单变量中,并将previous_prefix和前缀合并到一起,以获得new_prefix和类似的id。按此顺序获取数据可以解决单个sql中的问题。看看这个草案代码。
DATA WANT;
SET HAVE;
PREFIX_NEW =COALESCEC(PREVIOUS_PREFIX,PREFIX);
ID_NEW =COALESCEC(PREVIOUS_ID ,ID);
IF NOT MISSING(VENDOR_1) THEN VENDOR=VENDOR_1;
OUTPUT;
IF NOT MISSING(VENDOR_2) THEN VENDOR=VENDOR_2;
OUTPUT;
RUN;
PROC SQL;
SELECT PREFIX_NEW
, ID_NEW
, MIN(VENDOR) AS VENDOR_1
, MAX(VENDOR) AS VENDOR_2
FROM ( SELECT PREFIX_NEW
, ID_NEW
, VENDOR
, COUNT(*) AS COUNTER
FROM WANT
GROUP BY 1,2,3
HAVING COUNTER=1
)
;
QUIT;希望这会有帮助!
https://stackoverflow.com/questions/31259475
复制相似问题