1

我需要使用 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;
4

1 回答 1

3

有几种方法可以做到这一点。既然是针对一堂课,我会提供提示,而不是提供完整的解决方案。

1)第一种方法是同时使用UNIQUE函数和LOC函数。这种所谓的“UNIQUE-LOC 技术”对于类别计算非常有用。文章“ UNIQUE-LOC 技巧”中展示了一个一维示例。我将把它留给您将其概括为交叉表。

2) 第二种方法是同时使用 SORT 和 UNIQUEBY 函数。第二种技术在文章“ UNIQUE-LOC 技术的有效替代方案”中进行了描述。同样,我将留给你阅读这篇文章并弄清楚如何将它应用到你的课堂项目中。

我也可以告诉你哪种解决方案更容易......但我会让你做出决定。

祝你好运!

于 2013-01-21T14:40:55.073 回答