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 显示所有firm_ids 和对应year的值,其中的值是另一个值的total_workers10 倍,但在相同的范围内。例如,关于,Stata 应该显示and (不必完全以这种方式显示),因为 1977年比1976 年大 10 倍以上。total_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和使用。

为了缩短一行,您可以将 合并sort到主指令中,如下所示:

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

您的代码不起作用的原因是Stata在数据集上逐行评估它(即从上到下观察观察)-如果这里有错误,我很感激任何纠正-。只有当观察到的变量实例大于自身乘以 10 时,您才要求 Stata 制表,这是不可能的(即总是错误的)。请参阅以下输出:

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 回答