遍历许多没有规则的名称
Looping over many names which don't have rules
当只有几个名字时,在 Stata 中循环很容易。
此外,当有关于名称如何更改(例如递增)的规则时,我可以执行以下操作:
forval i = 1/5 {
...
}
但是,在某些情况下,我需要循环遍历数百个名称,这些名称没有递增规则。
例如:
48700 48900 48999 49020 49180 49340 ...
是否有一些写循环的简写方式?
还是我只需要煞费苦心地列出所有这些?
答案是这取决于。
如果这些是变量名的一部分,您可以这样做:
clear
set obs 5
foreach var in 48700 48900 48999 49020 49180 49340 {
generate var`var' = runiform()
}
ds
var48700 var48900 var48999 var49020 var49180 var49340
ds var48*
var48700 var48900 var48999
local names `r(varlist)'
foreach var of local names {
display `var'
}
.41988069
.06420179
.36276805
如果这些是文件名,宏扩展函数会很方便:
dir, w
48700.rtf 48999.rtf 49180.rtf
48900.rtf 49020.rtf 49340.rtf
local list : dir . files "*"
display `list'
48700.rtf48900.rtf48999.rtf49020.rtf49180.rtf49340.rtf
local list : dir . files "48*"
display `list'
48700.rtf48900.rtf48999.rtf
foreach fil of local list {
display "`fil'"
}
48700.rtf
48900.rtf
48999.rtf
编辑:
以上方法是关于如何高效地获取本地宏中所有相关名称的方法。
如果您已经知道这些名称并且您只是想要一种更简洁的方式来编写循环(或者想在多个循环中重复使用这些名称),您可以自己在本地宏中简单地分配这些名称:
local names var48700 var48900 var48999 var49020 var49180 var49340
foreach var of local names {
display `var'
}
.41988069
.06420179
.36276805
.52763051
.16493952
.66403782
本地宏 names
将在 运行 时间内自动扩展以包含所有指定的项目。
当只有几个名字时,在 Stata 中循环很容易。
此外,当有关于名称如何更改(例如递增)的规则时,我可以执行以下操作:
forval i = 1/5 {
...
}
但是,在某些情况下,我需要循环遍历数百个名称,这些名称没有递增规则。
例如:
48700 48900 48999 49020 49180 49340 ...
是否有一些写循环的简写方式? 还是我只需要煞费苦心地列出所有这些?
答案是这取决于。
如果这些是变量名的一部分,您可以这样做:
clear
set obs 5
foreach var in 48700 48900 48999 49020 49180 49340 {
generate var`var' = runiform()
}
ds
var48700 var48900 var48999 var49020 var49180 var49340
ds var48*
var48700 var48900 var48999
local names `r(varlist)'
foreach var of local names {
display `var'
}
.41988069
.06420179
.36276805
如果这些是文件名,宏扩展函数会很方便:
dir, w
48700.rtf 48999.rtf 49180.rtf
48900.rtf 49020.rtf 49340.rtf
local list : dir . files "*"
display `list'
48700.rtf48900.rtf48999.rtf49020.rtf49180.rtf49340.rtf
local list : dir . files "48*"
display `list'
48700.rtf48900.rtf48999.rtf
foreach fil of local list {
display "`fil'"
}
48700.rtf
48900.rtf
48999.rtf
编辑:
以上方法是关于如何高效地获取本地宏中所有相关名称的方法。
如果您已经知道这些名称并且您只是想要一种更简洁的方式来编写循环(或者想在多个循环中重复使用这些名称),您可以自己在本地宏中简单地分配这些名称:
local names var48700 var48900 var48999 var49020 var49180 var49340
foreach var of local names {
display `var'
}
.41988069
.06420179
.36276805
.52763051
.16493952
.66403782
本地宏 names
将在 运行 时间内自动扩展以包含所有指定的项目。