0

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

firm_id year    total_workers
   1    1975    614
   1    1976    68
   1    1977    708
   1    1978    18
   1    1979    536
   3    1975    154
   3    1976    59
   3    1977    115
   3    1978    40
   3    1979    380
   4    1975    49
   4    1976    42
   4    1977    53
   4    1978    54
   4    1979    34
   5    1975    254
   5    1976    1115

等々...

Stata にすべての と、 の値が別の の値の 10 倍であるが、同じ 内のfirm_id対応するを表示したいと思います。たとえば、 に関しては、1977 年には 1976 年よりも 10 倍以上大きくなったため、Stata は and を表示する必要があります (正確にこのように表示する必要はありません) 。yeartotal_workerstotal_workersyearfirm_idfirm_id == 1firm_id ==1year == 1977total_workerstotal_workers

このコンテキストではコマンドdisplayが機能しないように思われるため、tab多かれ少なかれ不十分な代替であるコマンドを使用しました。それにもかかわらず、私の全体的なコマンドは機能しません。それはこのように見え、最初の試みです....:

  by firm_id: tab firm_id year if total_workers >10*total_workers

ご覧のとおり、if条件は本来あるべき方法で指定されていません。

4

1 に答える 1

1

次のように行うことができる連続した年を(会社ごとに)比較したいだけのようです:

clear all
set more off

input firm_id year total_workers
    1 1975 614
    1 1976 68
    1 1977 708
    1 1978 18
    1 1979 536
    3 1975 154
    3 1976 59
    3 1977 115
    3 1978 40
    3 1979 380
    4 1975 49
    4 1976 42
    4 1977 53
    4 1978 54
    4 1979 34
    5 1975 254
    5 1976 1115
end

sort firm_id year // important
list, sepby(firm_id)

by firm_id: gen flag = (total_workers[_n] > 10*total_workers[_n-1])
list if flag == 1 

重要なポイントは、添え字sortの使用です。

sort1 行短くするには、次のようにメイン命令に組み込むことができます。

bysort firm_id (year): gen flag = (total_workers[_n] > 10*total_workers[_n-1])

コードが機能しない理由は、Stata がデータセットで行ごとにコードを評価するためです (つまり、上から下への観察による観察) - ここにエラーがある場合は修正をお願いします -。観測された変数のインスタンスの 1 つがそれ自体に 10 を掛けたものよりも大きい場合にのみ集計するように Stata に依頼していますが、これは不可能です (つまり、常に false)。次の出力を参照してください。

bysort firm_id (year): gen flag = 1 if total_workers > 10*total_workers

添字を明示的に使用すると、前の行は次のようになります

bysort firm_id (year): gen flag = 1 if total_workers[_n] > 10*total_workers[_n]
于 2013-11-09T13:34:41.520 に答える