2016-06-30 8 views
0

私は3つの連続変数X1,X2,X3とグループ変数Yを持っています。私はこのようなYでのXを要約するループを持っている:変数の値とグループによってネストループを実行するにはどうすればよいですか?

foreach X of var X1 X2 X3 { 
by Y, sort: summarize `X' 
} 

今、私は別のグループ変数Zを持っている:それは値1、2、3はどのように私は、それぞれの値を介して実行上記のループを作ることができたとしましょうZ(現在のループをZのループにネストする)?

Yが関与していない場合、私はこのように行うことができます。

foreach i of num 1/3 { 
foreach X of var X1 X2 X3 { 
summarize `X' if Z = `i' 
} 
} 

しかしYが入っている場合は、同様の方法、すなわちやって:

foreach i of num 1/3 { 
foreach X of var X1 X2 X3 { 
by Y, sort: summarize `X' if Z = `i' 
} 
} 

が機能しません。それは "無効な構文"と言います。

foreach i of num 1/3 { 
foreach j of num 0/2 { 
foreach X of var X1 X2 X3{ 
summarize `X' if Z = `i' & Y = `j' 
} 
} 
} 

でも動作しません。

+0

http://www.statalist.org/forums/forum/general-stata-discussion/general/1347478-how-can-i-do-でクロスポスト他の場所でのクロスポストについて人々に伝えることは有用です(そうしないことは広く推奨されていません)。 –

+0

あなたの思い出しのためにありがとう、私はこの事を次回に起こればより適切に対処します。 – NonSleeper

+0

あなたは何をすればいいのですか**今**はStatalistのスレッドを閉じます。 –

答えて

0

同等性のテストでは、演算子==が必要です。オペレータ=は、通常、代入のみを意味します。 (例外は特定のコマンドで見ることができます)

経験豊富なStataプログラマは可能な限りforeachではなくforvaluesを使用します。

forval i = 1/3 { 
    forval j = 0/2 { 
     foreach X of var X1 X2 X3 { 
      summarize `X' if Z == `i' & Y == `j' 
     } 
    } 
} 

of varlist構文は多くの用途がありますが、この

foreach X in X1 X2 X3 

ような単純な例のために、通常は罰金のようになります。

あなたの最も複雑な例を書き換えるのに十分です。

この例では、ループは一切必要ありません。ここでは、実行することができます例です。

sysuse auto, clear 
bysort foreign rep78: summarize mpg price 
+0

あなたのおかげで、それは動作します。 – NonSleeper

関連する問題