查找两个变量名标量的并集

Find union of two variable-name scalars

我有一个 Stata 程序输出一个由 space 分隔的变量名组成的局部标量。

我必须 运行 程序在两个样本(相同 dta)上执行两次并将并集(交集 - 出现在两个标量中的变量名)存储为新的 space-分离的本地标量(用于输入到另一个程序)。

我不知道如何拆分(每 spaces)和/或测试每个变量名称的出现。

我不确定我是否完全理解您的问题,如果这不是合适的答案,请添加示例以供我们使用。

这是检查两个 space 分隔的宏并获取它们的交集的代码,即使它不是最优雅的,除非您的宏很大,否则它应该仍然非常快。

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

Stata 有一堆可用于列表的扩展宏函数,您可以通过 help macrolists 找到它们,其中您可以看到 A & B returns A 和 B 的交集。如果 A ="a b c d" 和 B="b c f 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

您将标量转换为局部变量,获取它们的并集,然后将其转换为标量。仅修改您的代码以使用局部变量而不是标量可能更容易,因此您不必处理转换。