generate
には、time==1
で始まる一連の値を使って書き込まれた変数があります。前の時点の値を入力してください - Stata
variable
rest1w
が0から1に、またはその逆に変化するたびにシーケンスが変化します。
まず、x
を生成する必要があると思います。これは、シーケンスが再開する場所です(下の例のデータセットを参照)。私の例ではこれは一様ですが、私の完全なデータセットでは変化が異なります(つまり、5回目の観察ごとに変化しません)。
list time restload trainload rest1w x in 1/15
+-----------------------------------------+
| time restload trainload rest1w x |
|-----------------------------------------|
1. | 1 .1994715 .4780615 0 1 |
2. | 2 .2077734 .471063 0 2 |
3. | 3 .2157595 .4641159 0 3 |
4. | 4 .2234298 .4572202 0 4 |
5. | 5 .2307843 .4503757 0 5 |
|-----------------------------------------|
6. | 6 .2378229 .4435827 1 1 |
7. | 7 .2445457 .436841 1 2 |
8. | 8 .2509527 .4301506 1 3 |
9. | 9 .2570438 .4235116 1 4 |
10. | 10 .2628191 .4169239 1 5 |
|-----------------------------------------|
11. | 11 .2682785 .4103876 0 1 |
12. | 12 .2734221 .4039026 0 2 |
13. | 13 .2782499 .397469 0 3 |
14. | 14 .2827618 .3910867 0 4 |
15. | 15 .2869579 .3847558 0 5 |
+-----------------------------------------+
第二に、私はgenerate
変数load
する必要があります。シーケンスが再起動するたびにtime==1
からどのように再起動したいかを以下に示します。すなわち、第2のシーケンスでは、rest1w==0
,load!=trainload
である。
0の新しいシーケンスごとに、load
の値が再び開始時刻(ここではtime==1
)に戻ります。これは、load
の値の2番目の0の値が最初のシーケンスとまったく同じであることによって示されます。換言すれば、time==1
,trainload==.478
、次にload==.478
である。しかし、ここでtime==11
は、次いで、load==.478
とtime==15
、load==.450
(ここtime==5
用としてload
同じ)配列中の(クロックは、本質的にload
のでtime==1
ために再起動します)。これがx
を生成したかった理由です。これを新しいtime
変数として使うことができると思います。
+-----------------------------------------+
| time restload trainload rest1w x load
|-----------------------------------------
1. | 1 .1994715 .4780615 0 1 .4780615
2. | 2 .2077734 .471063 0 2 .471063
3. | 3 .2157595 .4641159 0 3 .4641159
4. | 4 .2234298 .4572202 0 4 .4572202
5. | 5 .2307843 .4503757 0 5 .4503757
|-----------------------------------------
6. | 6 .2378229 .4435827 1 1 .1994715
7. | 7 .2445457 .436841 1 2 .2077734
8. | 8 .2509527 .4301506 1 3 .2157595
9. | 9 .2570438 .4235116 1 4 .2234298
10. | 10 .2628191 .4169239 1 5 .2307843
|-----------------------------------------
11. | 11 .2682785 .4103876 0 1 .4780615
12. | 12 .2734221 .4039026 0 2 .471063
13. | 13 .2782499 .397469 0 3 .4641159
14. | 14 .2827618 .3910867 0 4 .4572202
15. | 15 .2869579 .3847558 0 5 .4503757
+-----------------------------------------+
以下のコードは、私だけどこ_n==1
のエントリ示します:
gen load==.
replace load = restload[_n==1] if rest1w==1
をそして私はlevelsof
の使用を好むが、それは一度働くかもしれませんが(それが仕事を得ることができませんでした私はx
を生成しましたが、時間を使うときはシーケンスを再起動しません。
gen load=.
levelsof x, local(levels)
foreach l of local levels {
replace load=trainload if rest1w==0
replace load=restload if rest1w==1
}
ありがとうございました!
あなたの文は不明です。スタックオーバーフローでコードを提示することが期待されていますが、この場合はコードに実装しようとしているルールが明確に記述されていなければなりません。私が理解している唯一のルールは、「最初のシーケンスにrest1w == 0があり、load = trainloadがそのシーケンスにある場合」です。しかし、その規則は最初のシーケンスにのみ適用されます。 rest1w == 0の3番目のシーケンスには適用されません。 –
私は生成したい変数のサンプルデータ( 'x'と' load')が役立つかもしれないと書いて説明することができないことをお詫びします。私はあなたがルールの意味すると思うものを加えました。明らかに、コードは 'gen load = trainload if rest1w == 0'であることは明らかであるが、後続のシーケンス(すなわち第2のシーケンス)においてタイムクロックがリセットされるので、これは事を複雑にする。 –
これは、後続のシーケンスのいずれかが最初のシーケンスより長い場合に何が起こるかを説明していませんが、それに沿って私を助けます。 –