SPSS:按特定序列发生过滤数据集

时间:2017-02-07 15:38:30

标签: excel filter statistics sequence spss

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

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

正如您所看到的,此快照中包含的许多公司都没有提供1996至2006财政年度的完整信息。

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

我知道有几个并发症:

  • 并非每个完整的序列都包含11行,因为许多公司在每个会计年度中包含多个董事的名称(例如,2001财政年度的3个董事名称 - >该公司的总共13行)
  • 公司之间潜在的序列重叠[例如公司A提供1996年至1999年;公司B(公司A之后立即出现)2000年至2006年] - >这将产生1996年至2006年的序列,包括公司A和B(这是不可取的)

我已经尝试了几个功能,包括按范围功能过滤:

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

正如预期的那样,这不起作用。我也尝试在Excel中过滤此数据集,但无济于事。

虽然我怀疑有一个函数可以解决这个问题,但我仍然没有找到任何有用的语法来解决这个问题。因此,我非常感谢一些意见。如果我的问题陈述缺乏明确性,请随时提出。

1 个答案:

答案 0 :(得分:1)

使用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.