0

不均衡で大きなデータセットがあり、各観測値は複数の文字列値を取り、それぞれが個別の変数に格納されます。

obs    year   var1    var2    var3    newval  

1      1990   str1    str2    str3     3   

1      1991   str1    str4    str5     2  

2      1990   str3    str4             2  

2      1991   str4    str5             1  

2      1993   str3    str5             0 

2      1994   str7                     1

各時点で、各観測について、文字列値が「新しい」かどうかをカウントする必要があります。これが意味することは、それらが前の年の観測によって取られた値の中に現れないということです。

Stataでこの問題にどのように取り組むべきですか?

ありがとうございました。

4

2 に答える 2

1

この質問はStatalistにも投稿されました。これが私の答えです。merge問題が 2 つ以上のファイルで始まる場合を除き、私は s を使用しない傾向があります。

clear
input obs     yr   str4 var1 str4  var2 str4   var3
1        90   str1    str2    str3
1        91    str1    str4    str5
2        90    str3    str4
2        91    str4    str5
2        93    str3    str5
2        94    str7
end
reshape long var , i(obs yr) j(which)
bysort obs var (yr) : gen new = _n == 1 & !missing(var)
bysort obs yr : replace new = sum(new)
by obs yr : replace new = new[_N]
reshape wide var, i(obs yr) j(which)

(MORE) さらなるコメントは主に効率性に焦点を当てており、ここではスペースではなく速度を意味します。(保管スペースがポスターを噛む可能性があります。)

ここで を使用して再構築しないreshapeと、問題は 3 つのループになります。つまり、識別子、各識別子の観測、および変数です。おそらく、外側の 2 つのループを 1 つに折りたたむことができます。しかし、観測に対する明示的なループは、通常、Stata では低速です。

Dimitriy と私が提案した再構築ソリューションでは、by:操作はコンパイルされたコードに直接移行し、比較的高速です。reshapeコードは解釈され、ファイル操作を伴うため、遅くなる可能性があります。一方reshapeで、ある程度の経験があればすぐに書き留めることができ、経験に伴う流暢さを習得することは本当に価値がreshapeあります。のヘルプと手動入力に加えて、http://www.stata.com/support/faqs/data-management/problems-with-reshape/に書いreshapeた FAQ を参照してください。reshape

もう 1 つの考慮事項は、この種のデータセットで他に何をしたいかです。似たような性質の問題が他にもある場合は、通常、 によって生成されるような長い構造の方が簡単になるreshapeため、その構造を維持することをお勧めします。

于 2013-03-22T02:06:55.543 に答える