3

26 個の変数があり、それぞれに 1 から 61 までの数値が含まれています。1 の場合、2 の場合など、新しい変数に 1 の数値が必要です。1 がない場合、変数には 2 が含まれている必要があります。つまり、1 15 28 39 46 1 12 などのデータを持つ 26 個の変数。

そして、1 2 1 2 2 1 などの 61 個の変数が必要です。

ベクトル、ループ、do if などの作成について読んでいますが、それをコーディングする正しい方法が見つかりません。私がやったことは、61個の変数を作成して書くだけです

V1=1 または V2=1 または (V26 までなど) の場合に実行します。

newV1=1 に再コーディングします。

なら終了。

EXE。

** 61 個の変数すべてについてこれを繰り返します。

newV1 を newV61 (missing=2) に再コーディングします。

したがって、これは多くのコードであり、私が想像するものからかなり回り道しています。

これで私を助けてくれる人はいますか?あなたの助けは大歓迎です!

4

3 に答える 3

1

これはそれを行う必要があります:

do repeat NewV=NewV1 to NewV61/vl=1 to 61.
  compute NewV=any(vl,v1 to v26).
end repeat.

説明: この構文は、変数 v1 から v26 のいずれかにその値があるかどうかをチェックするために、値 1 から 61 を調べます。それらのいずれかがある場合、右側の NewV は値 1 を受け取ります。それらのいずれもない場合、右側の NewV は値 0 を受け取ります。v1 から v26 がファイル内で連続して並べられていることを確認してください。そうでない場合は、次のように変更します。

compute NewV=any(vl,v1, v2, v3, v4 ..... v26).
于 2016-07-04T15:30:00.110 に答える
1

noumenal は正しいです。2 つのループで実行できます。ただし、別の方法は、元の値を使用して にアクセスし、VECTORそれを 1 として書き込み、他のすべての値をゼロに設定することです。

説明するために、最初にX1 to X4.

*Fake Data.
SET SEED 10.
INPUT PROGRAM.
LOOP Id = 1 TO 20.
END CASE.
END LOOP.
END FILE.
END INPUT PROGRAM.
VECTOR X(4,F2.0).
LOOP #i = 1 TO 4.
  COMPUTE X(#i) = TRUNC(RV.UNIFORM(1,62)).
END LOOP.
EXECUTE.

このコードは、各変数に対応する 4 つのベクトル セットを作成しDO REPEAT、実際にVECTORスタブを参照するために使用します。そして最後にRECODE- 欠落している場合は 2 とコード化する必要があります。

VECTOR V1_ V2_ V3_ V4_ (61,F1.0).
DO REPEAT orig = X1 TO X4 /V = V1_ V2_ V3_ V4_.
  COMPUTE V(orig) = 1.
END REPEAT.
RECODE V1_1 TO V4_61 (SYSMIS = 2).

元の VECTOR コマンドではすべてのスタブを書き出す必要があるため、少し面倒ですが、それをコピーして DO REPEAT サブコマンドに貼り付けることができます (または、それを実行するマクロを作成します)。


より単純な例として、A1 から 61 までの整数値を取ることができる元の変数 (たとえば ) があり、61 個のダミー変数に拡張したい場合、ベクトルを作成し、その中の位置にアクセスします。ベクター。

VECTOR DummyVec(61,F1.0).
COMPUTE DummyVec(A) = 1.

レコードの場合A = 10、ここでDummyVec10は 1 に等しくなり、他のすべてのDummyVec変数はシステムによってデフォルトで失われます。DO IF61 個の値を使用する必要はありません。

コードの残りの部分は、複数の元の変数に対して一挙に実行するための余分なものです。

于 2016-07-04T11:51:01.660 に答える
0

ネストされたループが必要です: 2 つのループ - 外側に 1 つ、内側に 1 つ。

于 2016-07-04T09:10:52.077 に答える