我正在寻找如何在一行变量中获得最后一次可用的测量。
数据集如下所示:
var1 var2 var3 var4 var5 ... var100
25 30 11。 。
30。 。 。 。44 15 22 35 16 24
。 。 31 27。
我想识别最后一个可用变量,每行都有一个值。如果我能做到这一点,请告诉我,如果不将选定的变量重组为案例。
答案 0 :(得分:3)
不确定。复制粘贴 - 运行整个语法,无需为演示打开任何数据。
data list free/v1 v2 v3 v4.
begin data
1 '' '' ''
1 2 '' ''
1 2 3 ''
1 2 3 4
end data.
do repeat v = v1 to v4.
if not missing(v) last_valid = v.
end repeat.
exe.
对于第一个有效值,您可以使用类似下面的语法。请注意,有一种替代方案在计算上更快(使用loop
和break
)但需要更多代码。如果下面的代码需要很长时间才能完成,我会为你编写快速版本,但让我们先试试这个简单的解决方案。
data list free/v1 v2 v3 v4.
begin data
'' '' '' 4
'' '' 3 4
'' 2 3 4
1 2 3 4
end data.
numeric first_valid.
do repeat v = v1 to v4.
if not missing(v) and missing(first_valid) first_valid = v.
end repeat.
exe.
答案 1 :(得分:-1)
谢谢你的回答!它帮助我朝着正确的方向前进。我最后使用了你建议的循环计算连续第一个有效测量的替代代码。
一排测量中的最后可用测量:
DEFINE last_valid ()
!DO !@ = 1 !TO 100.
!LET !a=!CONCAT("v",!@).
COMPUTE last_valid = !a.
!DOEND.
!ENDDEFINE.
last_valid.
EXECUTE.
连续第一次可用的测量:
DEFINE first_valid ()
!DO !@ = 1 !TO 100.
!LET !a=!CONCAT("v",!@).
LOOP IF missing(first_valid) = 1.
COMPUTE first_valid = !a.
END LOOP IF first_valid > 0.
!DOEND.
!ENDDEFINE.
first_valid.
EXECUTE.