有一个数据集如下所示:
如果直接进行转置。
SAS程序:
proc transpose data=test out=outx1 (drop=_name_);
by id;
var amount;
id sasdate;
idlabel sasdate;
run;
则转置的数据集如下所示:
但先通过PROC SQL过程步得到一个关于时间顺序的宏变量,然后在数据步中利用RETAIN则可以解决时间变量未按顺序排列的问题。
SAS程序:
proc sort data=test; by id sasdate; run;
proc sql noprint; select distinct cats('_',put(sasdate,date9.)) into :alldates separated by ' ' from test order by sasdate; quit; %put &alldates; data outx1; retain id &alldates; set outx1; run;
最终结果:
有道无术,术尚可进;有术无道,止于术也!