我有一个SAS数据集,其列布局如下:
Col1 Col2 Col3
A_jan2018 A_feb2018 A_mar2018
B_jan2018 B_feb2018 B_mar2018
C_jan2018 C_feb2018 C_mar2018
我需要以这种格式重新排序以A或B或C开头的列 -
Col1 Col2 Col3
A_Jan2018 B_Jan2018 C_Jan2018
A_Feb2018 B_Feb2018 C_Feb2018
A_Mar2018 B_Mar2018 C_Mar2018
A,B,C前缀不需要处于任何排序顺序(意味着它们可以从任何东西开始),但我的要求是根据月份重新排序它们(意味着B_Jan2018 A_Feb2018 C_2018没问题)。
有没有办法在SAS中实现这一目标?
答案 0 :(得分:0)
转置为所需格式(PROC TRANSPOSE)
%*create sample data;
data have;
informat col1 col2 col3 $10.;
input Col1 $ Col2 $ Col3 $;
cards;
A_jan2018 A_feb2018 A_mar2018
B_jan2018 B_feb2018 B_mar2018
C_jan2018 C_feb2018 C_mar2018
;
run;
%*Make it wide table;
data _long;
set have;
array _col(3) col1-col3;
do i=1 to 3;
prefix=scan(_col(i), 1, "_");
date=input(scan(_col(i), 2, "_"), anydtdte.);
value=catx('_', prefix, put(date, monyy7.));
output;
end;
format date date9.;
run;
%*Sort by desired output;
proc sort data=_long;
by date prefix;
run;
%* transpose to the desired format;
proc transpose data=_long out=want1;
by i;
var value;
run;
如果您的数据与发布完全相同且输出完全转置,那么这也可以工作,但它完全依赖于源数据的指定和正确排序。
proc transpose data=have out=want2;
var col1-col3;
run;