我有一个Stata 程序,它输出以空格分隔的变量名的本地标量。
我必须在两个样本(相同dta
)上运行该程序两次并将联合(交集 - 出现在两个标量中的变量名称)存储为新的空格分隔的本地标量(用于输入到另一个程序)。
我不知道如何拆分(每个空格)和/或测试每个变量名的出现。
我有一个Stata 程序,它输出以空格分隔的变量名的本地标量。
我必须在两个样本(相同dta
)上运行该程序两次并将联合(交集 - 出现在两个标量中的变量名称)存储为新的空格分隔的本地标量(用于输入到另一个程序)。
我不知道如何拆分(每个空格)和/或测试每个变量名的出现。
Stata 有一堆扩展的宏函数可以用在你可以用 找到的列表上,help macrolists
你可以看到 A & B 返回 A 和 B 的交集。如果 A="abc d" 和 B="bcf g",那么A & B = "b c"。
这使您可以执行以下操作:
clear
scalar l1="vara varb varc"
scalar l2="varc vard vare"
local l1 = scalar(l1)
local l2 = scalar(l2)
local inter: list l1 & l2
scalar inter="`inter'"
scalar list inter
您将标量转换为局部变量,获取它们的并集,然后将其转换为标量。只修改代码以使用局部变量而不是标量可能更容易,因此您不必处理转换。
我不确定我是否完全理解您的问题,如果这不是适当的答案,请添加一个示例供我们使用。
这是检查两个以空格分隔的宏并获取它们的交集的代码,即使它不是最优雅的,除非您的宏很大,否则它仍然应该很快。
local list1 first list here
local list2 list two here
local intersection
foreach l1 in `list1' {
foreach l2 in `list2' {
// if they overlap, add to the intersection macro
if "`l1'" == "`l2'" {
local intersection `intersection' `l1'
}
}
}
mac list // show the macros stored currently in the do file