【问题标题】:Find union of two variable-name scalars查找两个变量名标量的并集
【发布时间】:2017-10-16 21:52:19
【问题描述】:

我有一个Stata 程序,它输出一个以空格分隔的变量名的局部标量。

我必须在两个样本(相同的dta)上运行程序两次,并将联合(交集 - 出现在两个标量中的变量名)存储为新的以空格分隔的局部标量(用于输入到另一个程序)。

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

【问题讨论】:

  • 本地和标量是不同的。标量可以有一个临时名称,这不是一回事。无论哪种方式,展示您的代码并对其进行解释都是一个好主意。

标签: string stata local stata-macros


【解决方案1】:

Stata 有一堆扩展宏函数可用于列表,您可以通过help macrolists 找到这些列表,您可以在其中看到 A & B 返回 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

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

【讨论】:

    【解决方案2】:

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

    这是检查两个以空格分隔的宏并获取它们的交集的代码,即使它不是最优雅的,除非你的宏很大,否则它应该还是相当快的。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多