Matrix SAS:将行转换为矩阵

Matrix SAS:将行转换为矩阵,matrix,group-by,sas,sas-studio,Matrix,Group By,Sas,Sas Studio,嗨,我正在为暑期学校做一个项目,那个教书的人喜欢一排一排地工作。我认为将其转换为矩阵并使用数组将是有益的 当前数据集如下所示: data longdata; input var1 var2 Value; datalines; rowone colone 1 rowone coltwo 1 rowone colthree 2 rowone colfour 3 rowtwo colone 1 rowtwo coltwo 1 rowtwo colthree 1 rowtwo colfour 2 ro

嗨,我正在为暑期学校做一个项目,那个教书的人喜欢一排一排地工作。我认为将其转换为矩阵并使用数组将是有益的

当前数据集如下所示:

data longdata;
input var1 var2 Value;
datalines;

rowone colone 1
rowone coltwo 1
rowone colthree 2
rowone colfour 3
rowtwo colone 1
rowtwo coltwo 1
rowtwo colthree 1
rowtwo colfour 2
rowthree colone 3
rowthree coltwo 3
rowthree colthree 3
rowthree colfour 4
rowfour colone 1
rowfour coltwo 3 
rowfour colthree 3
rowfour colfour 3
;
run;
我想将上述内容转化为以下内容,最好是通过一个by声明:

data matrixdata;
input var1-var4;
datalines;

       colone coltwo colthree colfour
rowone       1      1      2        2
rowtwo       1      1      1        2
rowthree     3      3      3        4
rowfour      1      3      3        3
;
run;

Proc transpose
非常适合将分类数据转换为其他布局形式

proc transpose data=have out=want;
  by var1 notsorted;
  id var2;
  var value;
run;
尽管看起来像一个数组,但数据并不是隐式的数组。要在单个隐式数据步迭代期间成为4x4数组,传入数据集实际上需要每行16个变量,例如
v1-v16
,值
123143
。每行对应一个数组实例

data want2;
  retain v1-v16;
  array v (16) v1-v16;
  set have end=end;
  v(_n_) = value;
  if end;
  keep v:;
run;

data _null_;
  set want2;
  array m(4,4) v1-v16;
  do row = 1 to dim(m,1);
  do col = 1 to dim(m,2);
    put row= col= m(row,col)=;
  end;
  end;
run;

你试过什么?原始数据对于涉及class或by语句的SAS报告或分析来说是一个非常好的结构。对于某些编程任务来说,数据的矩阵布局可能“更容易”,但也可能是一个麻烦的问题。最终结果是信贷风险项目的过渡矩阵,因此,这是项目的结束-我更希望看到我的工作,而不是仍然以抽象的形式。我一直在尝试给列一个id,然后通过proc-sql将其转换为列表,然后使用该列表创建数组并将值输出到正确的列中,我还没有完成该代码,完成后将发布&在尝试了您的方法之后,您还可以查看哇,我真不敢相信proc转置有多简单。。。我花了很长时间试图手动创建列,然后在正确的位置输出值