循环多个本地人
Loop multiple locals
我有自动数据集,想创建一些条形图:
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 个本地人的 "values" 的每个可能组合创建一个条形图,而是我想要 if x=22
,然后 y=Title1
和然后 z=twentytwo
。同样 if x=20
然后 y=Title2
和 z=twenty
.
这一定是个简单的问题。而且我想我的搜索到目前为止还没有给我带来任何可用的结果,因为我不知道问题的正确词汇。
下面是我将如何解决这个问题。
. 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
如您所说,您确实需要一个循环。意识到这取决于经验而不是查找一些文档。
我无法对此进行测试,因为它取决于您的本地目录结构和未定义的全局宏,因此您的示例不可重现。我做了一些附带的简化。
如果您的单个元素包含空格,则需要双引号进行绑定。
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
}
我有自动数据集,想创建一些条形图:
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 个本地人的 "values" 的每个可能组合创建一个条形图,而是我想要 if x=22
,然后 y=Title1
和然后 z=twentytwo
。同样 if x=20
然后 y=Title2
和 z=twenty
.
这一定是个简单的问题。而且我想我的搜索到目前为止还没有给我带来任何可用的结果,因为我不知道问题的正确词汇。
下面是我将如何解决这个问题。
. 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
如您所说,您确实需要一个循环。意识到这取决于经验而不是查找一些文档。
我无法对此进行测试,因为它取决于您的本地目录结构和未定义的全局宏,因此您的示例不可重现。我做了一些附带的简化。
如果您的单个元素包含空格,则需要双引号进行绑定。
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
}