基本上,我有一个日志,其中包含通过多个案例跟踪的主题的唯一标识符。然后,我使用以下代码,通过此处的伟大社区建议,创建索引。不幸的是,我遇到了一个我无法弄清楚的新挑战。以下是提供透视图的当前数据集的示例。
索引功能
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中的循环有点时髦,难以开始工作。
答案 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.