我需要使用 PROC IML 准备一个交叉表(我知道在这种情况下使用 PROC FREQ 更常见,但这是针对学校项目的,他们强迫我们使用 IML)。
数据集如下所示:
A 橙
B 苹果
C 橙
B 芒果
B 苹果
并且输出应该在列中包含 ORANGE APPLE MANGO,在行中包含 ABC,在矩阵中包含频率,基本上:
橙苹果芒果
A 1 0 0
B 0 2 1
C 1 0 0
编辑添加:
我正在接近解决方案,但在选择符合某些条件的行时仍然存在一些问题 - 代码中的“(...)”。您可以在下面找到我的想法:
PROC IML;
USE work.data;
read all var {fruits } into fruits;
read all var {names} into names;
read all var {fruits names} into matrix;
close;
u1 = unique(fruits);
u2 = unique(names);
s = j(ncol(u2),ncol(u1),0);
do i=1 to ncol(u1);
do z=1 to ncol(u2);
idx=loc(…);
s[z,i]=countn(idx);
end;
end;
print s;