如果条件取决于存在

时间:2013-11-09 12:53:01

标签: stata

我的数据集如下所示:

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_id和相应的year total_workers,其中total_workers的值比另一个year的值大10倍firm_id但在同一firm_id == 1内。例如,关于firm_id ==1,Stata应该显示year == 1977total_workers(不一定要以这种方式显示),因为1977年total_workers超过10次数大于1976年的display

由于命令tab似乎在此上下文中不起作用,因此我使用了 by firm_id: tab firm_id year if total_workers >10*total_workers 命令,该命令或多或少不能令人满意。但是,我的整体命令不起作用。它看起来像这样,是第一次尝试......:

if

如您所见,{{1}}条件未按其应有的方式指定。

1 个答案:

答案 0 :(得分: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 

重点是sortsubscripting的使用。

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

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

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

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]