1

PROC IMLを使用してクロステーブルを準備する必要があります(このような場合はPROC FREQを使用するのが一般的ですが、これは学校のプロジェクト用であり、IMLの使用を強制されました)。

データセットは次のようになります。

オレンジ
Bアップル
Cオレンジ
Bマンゴー
アップル

そして、出力には、基本的に、列にORANGE APPLE MANGO、行にABC、マトリックスに頻度が含まれている必要があります。

オレンジアップルマンゴー
A10 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 手法」は、カテゴリの計算に非常に役立ちます。1 次元の例は、記事「UNIQUE-LOC トリック」に示されています。クロスタブに一般化することはあなたに任せます。

2) 2 番目の方法は、SORT 関数と UNIQUEBY 関数を一緒に使用することです。この 2 番目の手法については、記事「UNIQUE-LOC 手法の効率的な代替手段」で説明されています。繰り返しますが、この記事を読んで、それをクラスのプロジェクトに適用する方法を理解するのはあなたに任せます。

どちらの解決策がより簡単かを説明することもできますが、その決定はあなたに任せます。

幸運を!

于 2013-01-21T14:40:55.073 に答える