変数の行で利用可能な最後の測定値を取得する方法を探しています。
データセットは次のようになります。
var1 var2 var3 var4 var5... var100
25 30 11. . .
30 . . . . .
44 15 22 35 16 24
. . 31 27 . .
各行の値で最後に使用可能な変数を識別したいと思います。選択した変数をケースに再構築せずにそれを行うことができるかどうか教えてください。
変数の行で利用可能な最後の測定値を取得する方法を探しています。
データセットは次のようになります。
var1 var2 var3 var4 var5... var100
25 30 11. . .
30 . . . . .
44 15 22 35 16 24
. . 31 27 . .
各行の値で最後に使用可能な変数を識別したいと思います。選択した変数をケースに再構築せずにそれを行うことができるかどうか教えてください。
もちろん。デモ用にデータを開かずに、この構文全体をコピーして貼り付けて実行します。
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
andを使用する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.
答えてくれてありがとう!それは私が正しい方向に進むのを助けました。あなたが提案したように、ループを使用して行の最初の有効な測定値を計算するための代替コードになりました。
測定値の行で最後に利用可能な測定値:
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.