Вы переворачиваете (также называете это транспонированием) данные в нескольких наборах столбцов.
Кодеры обычно используют PROC TRANSPOSE
для сводки данных, но специфика этого вопроса не может быть решена за один шаг pro c.
Вместо выполнения шагов TRANSPOSE / DATA / TRANSPOSE или TRANSPOSE / TRANSPOSE / TRANSPOSE / MERGE, один шаг DATA с ARRAY может быть закодирован для выполнения поворота.
Пример:
ПРИМЕЧАНИЕ: ваше соглашение об именах столбцов P<#>_DX
, P<#>_DY
и P<#>_CD
означает, что элементы ARRAY должны быть явно перечислены. Если вместо этого имена столбцов были построены с использованием соглашения DX_<#>
, столбцы можно было бы указать в синтаксисе списка нумерованных суффиксов DX_1-DX_8
data want;
set have;
array DXs(8) P1_DX P2_DX ...you fill in the rest... P8_DX;
array DYs(8) P1_DY P2_DY ...you fill in the rest... P8_DY;
array CDs(8) P1_CD P2_CD ...you fill in the rest... P8_CD;
length DX DY CD 8;
do seq = 1 to dim(DXs);
DX = DXs(seq);
DY = DYs(seq);
CD = CDs(seq);
* only output if there is some data;
if NMISS(DX,DY,CD) < 3 then OUTPUT;
end;
* seq is also kept in case you need to know which <#> a DX DY CD came from;
keep DATE COD TOTAL DX DY CD seq;
run;