Stata 在许多没有';我没有规则

Stata 在许多没有';我没有规则,stata,stata-macros,Stata,Stata Macros,当名字很少时,在Stata中循环是很容易的 此外,如果有关于名称如何更改的规则(例如增量),我可以执行以下操作: forval i = 1/5 { ... } 然而,在有些情况下,我需要循环使用数百个名称,这些名称没有递增规则 例如: 48700 48900 48999 49020 49180 49340 ... 有没有写循环的简写方法? 还是我必须费力地把它们全部列出来?答案是这要看情况而定 如果这些是变量名的一部分,则可以执行以下操作: clear set obs 5 fore

当名字很少时,在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
本地宏
名称
将在运行时自动展开,以包括所有指定的项。

答案取决于具体情况

如果这些是变量名的一部分,则可以执行以下操作:

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

本地宏
名称
将在运行时自动展开,以包含所有指定项。

这些是变量名称吗?文件名?这取决于你有什么。您需要更具体地说明必须循环的“名称”。这些是变量名称吗?文件名?这取决于你有什么。你需要更具体地说明你必须循环的“名称”。