将 3 个变量转换为矩阵形式以在 SAS 中创建热图

converting 3 variable into a matrix form to create a heatmap in SAS

我正在尝试将 3 个变量转换为矩阵,例如,如果您有以下内容:

(CHAR) (char) (num)

Var1 Var2 Var3

A B 1

C D 2

英法 3

AD 4

A F 5

C B 6

C F 7

E B 8

E D 9

关于如何将上述三个变量转换为下面这种形式的矩阵的任何想法,我的目标是使用此矩阵构建热图

B   D   F

1 4 5

C 6 2 7

E 8 9 3

任何人都可以使用 SAS/IML 或其他程序帮助我在 SAS 中执行此操作吗?谢谢!

如果你先post你的代码然后提问会更好。

我认为 proc transpose 是最快的解决方案。

data _t1;
input var1 $ var2 $ var3 5.;
cards;
A B 1 
C D 2
E F 3
A D 4
A F 5
C B 6
C F 7
E B 8
E D 9
run;

proc sort data=_t1;by var1;run;

proc transpose data=_t1 out=_t2(drop=_name_ rename=(var1=HereUpToYou));
by var1;
var var3;
id var2;
run;

假设您使用的是最新版本的 SAS/IML(13.1 或更高版本),请使用 HEATMAPCONT 或 HEATMAPDISC 调用:

proc iml;
m = {1 4 5,
     6 2 7,
     8 9 3};
call heatmapcont(m) xvalues={B D F} yvalues={A C E};

详情见Creating heat maps in SAS/IML