私が理解しているように、は、最初の1
の位置であり、highclass
は、最後の1
の位置です。
ループは必要ありません。実際、Stataでは1つのステートメントが実行されます(これは問題の言語です)。それを行うには
二つの方法:
古いスタイル(以下、特にStataの12に関連して)
ここで私はそれがそのように明確である疑いがあるので、私は、いくつかの中に単一の文を分割しています。 substr()
(not substring()
)はコマンドではなく、関数であることに注意してください。
clear
input str10 my_var lowclass highclass
"0000000000" 1 5
"0000000000" 2 4
"0000000000" 3 3
"0000000000" 1 10
"0000000000" 7 10
end
local zeros "0000000000"
local ones "1111111111"
replace my_var = substr("`zeros'", 1, lowclass - 1)
replace my_var = my_var + substr("`ones'", 1, highclass - lowclass + 1)
replace my_var = my_var + substr("`zeros'", 1, 10 - highclass)
list
+----------------------------------+
| my_var lowclass highcl~s |
|----------------------------------|
1. | 1111100000 1 5 |
2. | 0111000000 2 4 |
3. | 0010000000 3 3 |
4. | 1111111111 1 10 |
5. | 0000001111 7 10 |
+----------------------------------+
(アップのStata 13)新スタイル
マタとのStata 13は、最大文字列の乗算、(例えば10 * "1"
)を許可するので、これは動作します:例えば
replace my_var = (lowclass - 1) * "0" + (highclass - lowclass + 1) * "1" + (10 - highclass) * "0"
注意を-1 * "0"
は完全に合法ですが、欠落(空の文字列)として評価されます。
変数名にはスペースを使用できません。アンダースコアを含むことができます。私は 'highclass'と' lowclass'のバリエーションを同じ名前に編集しました。私が間違っていると思われる場合は、コードを変更する必要があります。 –
良い質問は、再現可能なデータの例を示し、コードで明示的な試行を示します。 –