Sas 将列向右移动

Sas 将列向右移动,sas,Sas,我有一个SAS数据集,如下所示: Month Col1 Col2 Col3 Col4 200801 11 2 3 20 200802 5 9 4 10 . . . . . . . . . . . . . . . 201212 3 34 1 0 我想通过将每行的Col1-Col4列值向右移动来创建一个数据集。它看起来将沿对角线移动 Month

我有一个SAS数据集,如下所示:

Month  Col1 Col2 Col3 Col4
200801  11   2    3    20
200802   5   9    4    10
  .      .   .    .     .
  .      .   .    .     .
  .      .   .    .     .
201212   3   34   1     0
我想通过将每行的Col1-Col4列值向右移动来创建一个数据集。它看起来将沿对角线移动

Month  Col1 Col2 Col3 Col4  Col5 Col6 Col7 . . . . . . . Coln
200801  11   2    3    20
200802   .   5    9     4    10
  .      .   .    .     .
  .      .   .    .     .
  .      .   .    .     .
201212   .   .    .     .    .    .     .  . . 3   34   1   0
有人能建议我怎么做吗


谢谢

首先,如果你可以避免这样做,就这样做。这是一种非常稀疏的数据存储方式,将涉及大型数据集(至少肯定使用选项COMPRESS),并且通常可以很好地使用类变量进行处理

如果您确实必须这样做,
PROC TRANSPOSE
是您的朋友。虽然这在数据步骤中是可能的,但在PROC转置中它不那么混乱,也更灵活

首先,制作一个完全垂直的数据集(month+colname+colvalue):

在该数据步骤中,您将在
colname
中创建最终列名,并将其设置为转置。如果您的数据与上述数据不同(特别是,如果您的数据由其他数据分组),N可能不起作用,您可能需要执行一些逻辑(例如计算与200801的差异)来计算col#

然后,proc转置:

proc transpose data=pre_t out=want;
by month;
id colname;
var value;
run;
瞧,你应该得到你想要的。确保正确排序,以便按预期顺序获得输出

proc transpose data=pre_t out=want;
by month;
id colname;
var value;
run;