我正在努力寻找有效的,转置类似的代码,可以将下面的Test表转换为最终的表。下面的代码适用于此示例,但出于实际目的,拆分数据步骤可以生成非常深的表(在我的示例中为1.37亿条记录,而聚合后的记录为2k条)。
我希望有一些我遗漏的过程或数据步骤技巧,可以跳过这个中间步骤,从而更有效。
Data test;
Input f1 $ f2 $ f3 $ f4 $ f5 $ f6 $ f7 $ f8 $;
DataLines;
a c f h k l o q
a c f h k l o q
a c g h k m o q
b c g h k m o q
b d g i k m o r
b d g i k n o r
b e g j k n o s
b e g j k n p s
;
Run;
Data final;
Input field $ values $ records;
DataLines;
f1 a 3
f1 b 5
f2 c 4
f2 d 2
f2 e 2
f3 f 2
f3 g 6
f4 h 4
f4 i 2
f4 j 2
f5 k 8
f6 l 2
f6 m 3
f6 n 3
f7 o 7
f7 p 1
f8 q 4
f8 r 2
f8 s 2
;
Run;
/*Working solution - could it be done more efficiently?*/
Data split;
Set test;
Array f{8} f1-f8;
Do i=1 To 8;
field = 'f'||PUT(i,best2.);
values = f{i};
Output;
End;
Drop i f1-f8;
Run;
Proc SQL;
Create Table final As
Select
field
,values
,COUNT(*) As records Format=comma8.0
From split
Group By 1,2
Order By 1,2
;
Quit;
https://stackoverflow.com/questions/47719354
复制