2

tl;dr: まず、一連の変数を 0/1 に二分してから、これらの値を合計する必要があります。14x8 変数に対してこれを行う必要があるため、ループでこれを行う方法を探しています。

こんにちは、みんな、

私はあなたの助けが必要な非常に具体的な問題を抱えています:

問題の説明: 私のデータセットには、1 から 6 の範囲のスコアを持つ 8 つの変数 (たとえば、a1 から a8、b1 から b8、c1 から c8 など) の 14 セットがあります。変数は連続していないことに注意してください。それらの間に文字列変数があります(別の目的で必要です)。

これらの変数の各セット (scoreA、scoreB、scoreC など) のスコアを計算したいことはわかっています。スコアは、次のルールに従って計算する必要があります。

scoreA = 0.
If a1 > 1 then increment scoreA by 1.
If a2 > 1 then increment scoreA by 1.
... etc.

例: データセット:

1 5 6 3 2 1 1 5

1 1 1 3 4 6 2 3

スコア:

5

5

私の以前の試み: 最初に変数を再コード化して二分し、次にこれらの値を合計することで、このタスクを実行できることを知っています。これには 2 つの大きな欠点があります。まず、必要のない新しい変数がたくさん作成されます。第二に、同じタスクを実行する必要がある複数の変数セット (変数名が異なる) があるため、これは非常に退屈で反復的なタスクです。

DO REPEATコマンドとコマンドLOOPを調べましたが、VECTORそれらがどのように機能するかを完全には理解していないようです。オンラインで読んだ他の例から解決策を自分の問題に移すことができませんでした。1 セットの変数のみをループしてタスクを実行するソリューションに満足し、その後、他の 13 セットの変数に合わせて構文を適切に調整します。あなたが私を助けてくれることを願っています。

4

2 に答える 2

1

上記の do repeat ループは完全に機能しますが、変数のセットが多数あるため、作成するのは面倒です。Python のプログラミング機能を使用すると、変数の順序に関係なく、これを自動的に生成できます。以下のコードは、8 個のセットで出現する小文字の数字の形式の名前を持つ無制限の数の変数を想定し、do の繰り返しを生成して実行します。簡単にするために、出力変数ごとに 1 つのループを生成しますが、これらはすべて 1 回のデータ パスで実行されます。名前のパターンが違う場合は、このコードは何とでも言えば調整できます。

begin program.
import spss, spssaux
vars = sorted(spssaux.VariableDict(pattern="[a-z]\d").variables)

cmd = """compute %(score)s = 0.
do repeat index = %(vlist)s.
compute %(score)s = %(score)s + (index > 1).
end repeat."""

if len(vars) % 8 != 0:
   raise ValueError("Number of input variables not a multiple of 8")

for v in range(0, len(vars),8):
  score =  "score" + vars[v][0]
  vlist = " ".join(vars[v:v+8])
  spss.Submit(cmd % locals())
end program.
execute.
于 2016-05-27T14:24:21.583 に答える