我的数据集如下所示:
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 == 1977
和total_workers
(不一定要以这种方式显示),因为1977年total_workers
超过10次数大于1976年的display
。
由于命令tab
似乎在此上下文中不起作用,因此我使用了 by firm_id: tab firm_id year if total_workers >10*total_workers
命令,该命令或多或少不能令人满意。但是,我的整体命令不起作用。它看起来像这样,是第一次尝试......:
if
如您所见,{{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
重点是sort
和subscripting的使用。
要缩短一行,可以将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]