SAS-基于月份对数据集变量重新排序
我有一个SAS数据集,其列布局如下:SAS-基于月份对数据集变量重新排序,sas,Sas,我有一个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开头的列重新排序-- A、B、C前缀不需要按任何排序顺序排列(这意味着它们可以从任何东西开始),但我的要求是根据月份和年份对它们重新排序(这意味着2018年1月B日2018年2月C日可以)
Col1 Col2 Col3
A_jan2018 A_feb2018 A_mar2018
B_jan2018 B_feb2018 B_mar2018
C_jan2018 C_feb2018 C_mar2018
我需要按照这样的格式对以A、B或C开头的列重新排序--
A、B、C前缀不需要按任何排序顺序排列(这意味着它们可以从任何东西开始),但我的要求是根据月份和年份对它们重新排序(这意味着2018年1月B日2018年2月C日可以)
在SAS中有没有实现这一点的方法
proc transpose data=have out=want2;
var col1-col3;
run;
如果你有少量变量,你可以使用
retain Col1 Col2 Col3 A_Jan2018 B_Jan2018 C_Jan2018 A_Feb2018 B_Feb2018 C_Feb2018 A_Mar2018 B_Mar2018 C_Mar2018代码>设置前。如果不是,那么你必须创建一些额外的帮助变量来实现这一点。这是一个问答网站,不是一个免费的代码编写服务。如果您尝试自己解决问题,并在遇到特定问题时发布可复制的代码示例,您将得到更好的响应。这是您的实际数据吗?或者,您是否试图传达数据当前在按日期排序的列和按变量(A、B、C)排序的行中,并且希望将其转换为按变量(A、B、C)排序的列和按日期排序的行?您是否有id变量来指示当前行代表的变量?你怎么知道某一列代表的日期?只是好奇-你使用%*
注释格式而不是*,有什么特别的原因吗
或/**/
?不,这意味着我最近一直在写宏。
%*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;