SPSS:按特定顺序出现过滤数据集

背景:我有一个包含主要机构/公司的财务信息的大型数据集(> 100000条目)。 有几个栏目包含会计年度(第1列),公司名称(第5列),董事姓名(第6列),年收入(第11列)等信息。理想情况下,每个公司应包括其财务信息从1996年到2006年这个数据集。 然而,许多公司缺less一年或多年的信息,因此应该排除在进一步的分析之外。

这是我的数据集的屏幕截图: BoardCharacteristics

正如你所看到的,这个快照中包含的许多公司没有提供1996 – 2006年财政年度的完整信息。

目标:第一步是过滤这个数据集,只有在整个时间范围内(即从1996年到2006年)才提供信息的公司才被纳入后续分析。 由于所提供的信息理想情况下应该至less等于每个公司11行(即1996 – 2006年),而且许多公司每个财政年度都包含一个以上董事姓名,我最初的想法是指定一个filter,只select行(从1996年开始到2006年结束),并按顺序对整个数据集执行此操作,同时省略不完整的序列(例如2001年至2006年的A公司缺失)或其间的任何内容。 然而,由于序列长度的不一致性和序列组成的可变性,select任何从1996开始到2006年结束的序列的简单/刚性滤波器是不够的。

我知道有几个并发症:

  • 并不是每一个完整的序列都由11行组成,因为许多公司在每个财政年度中包含多个董事姓名(例如,2001财年的总监名字为3,这家公司的总行数超过13行)
  • 公司之间的潜在序列重叠[例如,公司A提供了1996年至1999年; B公司(紧接A公司之后)2000年到2006年 – >这将导致从1996年到2006年,包括A公司和B公司(这是不可取的)

我已经尝试了几个函数,包括范围函数的filter:

RANGE(exp,low,high) --> RANGE(year,1996,2006) 

正如所料,这没有奏效。 我也尝试在Excel中过滤这个数据集,但无济于事。

虽然我怀疑是否有单一的function来解决这个问题,但我还没有得到任何有用的语法来解决这个问题。 因此,我非常感谢一些意见。 如果对我的问题陈述有任何不清楚的地方,请随时提出。

在这里需要使用AGGREGATE 。 这里是一个例子,让你从块:

 DATA LIST FREE / Company Year. BEGIN DATA 1, 1995 1, 1996 1, 1997 1, 1998 1, 1999 1, 2000 1, 2001 1, 2002 1, 2002 1, 2002 1, 2003 1, 2004 1, 2005 1, 2006 2, 1996 2, 1997 2, 2005 2, 2006 END DATA. DATASET NAME DS0. /* Filter data to retain only years of interest*/. SELECT IF RANGE(Year, 1996,2006). /* Aggregate to remove multiple year entries */. DATASET DECLARE DSBREAK01. AGGREGATE OUTFILE=DSBREAK01 /BREAK=Company Year /Count1=N. /* Aggregate to find first and last year present in data and a count of number of other distinct years in-between*/. DATASET ACTIVATE DSBREAK01. DATASET DECLARE DSBREAK02. AGGREGATE OUTFILE=DSBREAK02 /BREAK=Company /Count2=N /FirstYear=MIN(Year) / LastYear=MAX(Year). DATASET ACTIVATE DSBREAK02. /* Compute flag for companies which match desired conditions*/. COMPUTE Flag=(Count2=11 AND FirstYear=1996 AND LastYear=2006). /* Match flag variable to original dataset for further processing*/. DATASET ACTIVATE DS0. MATCH FILES FILE=* /TABLE=DSBREAK02 /BY Company. ADD FILES FILE=* /DROP=Count2 FirstYear LastYear.