使用SPSS参考变量和索引创建新变量

时间:2017-05-17 16:30:21

标签: indexing aggregate spss

基本上,我有一个日志,其中包含通过多个案例跟踪的主题的唯一标识符。然后,我使用以下代码,通过此处的伟大社区建议,创建索引。不幸的是,我遇到了一个我无法弄清楚的新挑战。以下是提供透视图的当前数据集的示例。

索引功能

sort cases by Unique_Modifier.
if $casenum=1 or Unique_Modifier<>lag(Unique_Modifier) Index=1.
if Unique_Modifier=lag(Unique_Modifier) Index=lag(Index)+1.
format Index(f2).
execute. 

Unique Identifier   Index   Variable of interest
A                    1          101
A                    2          101
A                    3          607
A                    4          607
A                    5          101
A                    6          101
B                    1          108
B                    2          210
C                    1          610
C                    2          987
C                    3         1100
C                    4          610

我想要做的是创建一个新变量,其中包含感兴趣的变量列中离散的不同条目的数量。预期的输出如下:

Unique Identifier   Index   Variable of interest    Intended Output
A                       1               101               1
A                       2               101               1
A                       3               607               2
A                       4               607               2
A                       5               101               2
A                       6               101               2
B                       1               108               1
B                       2               210               2
C                       1               610               1
C                       2               987               2
C                       3               1100              3
C                       4               610               3

我尝试了几种不同的方法,一种方法是使用类似的索引函数,但它失败,好像感兴趣的变量在后续行中不同,它有效,但有时,我们再次出现一个变量,如5行之后。我的下一个想法是使用AGGREGATE函数,但是我查看了IBM手册,看起来集合中的函数似乎不会产生预期的输出。有人有主意吗?我认为循环是最好的选择,但SPSS中的循环有点时髦,难以开始工作。

1 个答案:

答案 0 :(得分:1)

试试这个:

data list list/Unique_Identifier   Index   VOI (3f)  .
begin data.
1                       1               101               
1                       2               101               
1                       3               607               
1                       4               607               
1                       5               101               
1                       6               101               
2                       1               108               
2                       2               210               
3                       1               610               
3                       2               987               
3                       3               1100             
3                       4               610               
end data.

string voiT (a1000).
compute voiT=concat(ltrim(string(VOI,f10)),",").
compute Intended_Output=1.
do if index>1.
   do if index(lag(voiT), rtrim(voiT))>0.
      compute Intended_Output=lag(Intended_Output).
      compute voiT=lag(voiT).
   else.
      compute Intended_Output=lag(Intended_Output)+1.
      compute voiT=concat(rtrim(lag(voiT)), rtrim(voiT)).
   end if.
end if .
exe.