2016-07-25 5 views
0

私は、自動データセットを持っており、いくつかの棒グラフを作成したいと思います:ループ複数の地元

sysuse auto, clear 
     local mpg "22 20 17" 
     local titles "Title1 Title2 Title3" 
     local path "twentytwo twenty seventeen" 

foreach x of local mpg { 
foreach y of local titles { 
foreach z of local path { 
      keep if mpg==`x' & foreign==0 
      egen hv_rank=rank(price) 
     # delimit ; 
     graph bar price, 
      over (make, sort(hv_rank) reverse label(labsize(vsmall))) 
      ytitle("") 
      horizontal title("`y'", size(medium)) 
      ; 
     # delimit cr 
      graph save "$dir_gphs\mpg`z'f0-bal.gph", replace 
      drop hv_rank 
      sysuse auto, clear 
      } 
      } 
      } 

私は私の3人の地元の「値」のすべての組み合わせのための棒グラフを作成する必要はありません代わりにif x=22、次にy=Title1、次にz=twentytwoがあるようにしたいと思います。同様にif x=20、次にy=Title2およびz=twenty

これは単純な問題でなければなりません。そして私は今までの検索で問題の正しい語彙がわからないので、私には利用可能な結果が得られていないと思います。

答えて

2

ここで私はどのように問題にアプローチしますか。

. local mpg 22 20 17 

. local titles `" "Title 1" "Title 2" "Title 3" "' 

. local path twentytwo twenty seventeen 

. 
. forvalues i = 1/3 { 
    2.   local x : word `i' of `mpg' 
    3.   local y : word `i' of `titles' 
    4.   local z : word `i' of `path' 
    5.   display `" `x' --- `y' --- `z' "' 
    6.   } 
22 --- Title 1 --- twentytwo 
20 --- Title 2 --- twenty 
17 --- Title 3 --- seventeen 

または代わり

. local set1 22 "Title 1" twentytwo 

. local set2 20 "Title 2" twenty 

. local set3 17 "Title 3" seventeen 

. forvalues i = 1/3 { 
    2.   local x : word 1 of `set`i'' 
    3.   local y : word 2 of `set`i'' 
    4.   local z : word 3 of `set`i'' 
    5.   display `" `x' --- `y' --- `z' "' 
    6.   } 
22 --- Title 1 --- twentytwo 
20 --- Title 2 --- twenty 
17 --- Title 3 --- seventeen 
+1

スナップ!本質的に同じ答え。何らかの欠点があるので、私は私の立場を立たせます。 –

+1

はい、結んでいます。私たちはブラウザのプラグインが必要です。私は私の2番目の例を元の質問から少し離れた方が好きなので、私の立場を立てておきます。なぜなら、元の質問よりも別の値を追加する方が一般化するからです。どちらもマルチワードタイトルの周りに二重引用符を使用することを示しています。最初は、複数の引用符付きアイテムを1つのマクロに配置する微妙な問題を回避する方法を示しています。 –

+0

ありがとう、ニックとウィリアム。私は基本的にウィリアムズのソリューションの最初のバージョンに行った。私がタイトルのためのスペースを使うことを可能にするタイトルの二重引用符は私にも多くの助けとなりました。 –

1

あなたが言うように、あなたは本当に、単一のループをしたいです。それを実現することは、ドキュメンテーションを見つけるのではなく、経験に依存します。

ローカルディレクトリ構造と定義されていないグローバルマクロに依存するため、テストできません。したがって、例は再現できません。私はいくつかの付随的な単純化を行った。

個々の要素にスペースが含まれている場合は、バインドするには二重引用符が必要です。

sysuse auto, clear 

forval j = 1/3 
    local x : word `j' of 22 20 17 
    local title: word `j' of Title1 Title2 Title3 
    local path: word `j' of twentytwo twenty seventeen 

    graph bar price if mpg==`x' & foreign==0 /// 
    over(make, sort(1) reverse label(labsize(vsmall))) /// 
    ytitle("") horizontal title("`title'", size(medium)) 

    graph save "$dir_gphs\mpg`path'f0-bal.gph", replace 
}