3

私は統計の専門家ではありませんが、かなりの量のデータを処理する必要があります。ほとんどの場合、これらのデータ セットはオンライン調査から得られます。したがって、私は MySQL データベースを持っており、そこから結果を得る方法を知っています。

しかし、Stata ファイルを取得したので、分析を行う必要があります。MySQL ではそれを行う方法を知っていますが、Stata で行き詰まっており、あなたの助けを求めています。

次の列を含む小さすぎないテーブル(約50k行)があります(さらに列がありますが、これらは私が使用する必要がある列です):

id - オブジェクト ID、一意の値

name - オブジェクトの名前、文字列値

class - オブジェクトのクラス、整数範囲 1 から 6

origin - オブジェクトの原点、整数範囲 1 - 2

50,000 行の中には、約 7,000 の異なる名前しかありません。Stata では、 を使用してすべての名前を取得list nameでき、list name if class == 2.

ここで、すべての異なる名前のリストと、その名前を持つオブジェクトの数が必要で、リストを count で並べ替えます。MySQL では、クエリを実行しますSELECT name, COUNT(*) AS cnt FROM objects GROUP BY name ORDER BY cnt DESCしかし、それは Stata ではどのように行われるのでしょうか?

次のステップは、各クラスまたは両方のオリジンのリストを取得することです。つまりSELECT name, COUNT(*) AS cnt FROM objects WHERE class = 2 GROUP BY name ORDER BY cnt DESC、それは Stata でも可能ですか?

ps: Stata は実際にはプログラミング言語ではないため、stackoverflow が適切な場所かどうかはわかりません。しかし、ここでいくつかの Stata 関連の質問を見つけました。それが私がここに投稿した理由です。より良い場所がある場合は、適切な場所を教えてください。

4

2 に答える 2

2

Stata は固定長の長方形のテーブルでのみ機能するため、50k 行全体にまたがる列のみを追加できることに注意してください。このセットアップ内で、これができることです。

最初の問題 (名前と頻度のリスト) については、次のことができます。

   collapse (count) freq = name, by(class)
   sort class freq name
   list class name freq, sepby(class)

collapseは既存のデータを削除し、要約に置き換えます。(通常、私はデータ管理のこの面でこのコマンドを嫌いますが、ここでは機能するはずです。) これが発生したくない場合は、より洗練されたトリックを次に示します。

   bysort class name : generate long freq = _N
   bysort class name : generate byte first = (_n==1)
   sort class freq name
   list class name freq if first, sepby(class)

(説明:_Nby-group_n内の観測の数であり、 -group 内の現在の観測の数ですby。)

if class==#すでに知っているように、これを で対象のクラスにサブセット化できます。

于 2011-09-01T19:08:21.783 に答える